ste*_*ipe 5 spring unit-testing spring-boot
让我们假设我有两个类:
这TodoRepository是一个简单的 CRUD 存储库:
public interface TodoRepository extends CrudRepository<T, ID> {
}
Run Code Online (Sandbox Code Playgroud)
这TodoService只是一个调用此存储库的类:
@Service
public class TodoService{
private final TodoRepository todoRepository;
@Autowired
public TodoService(TodoRepository todoRepository) {
this.todoRepository = todoRepository;
}
public void createTodo(Todo todo) {
todoRepository.save(todo);
}
}
Run Code Online (Sandbox Code Playgroud)
我应该费心测试服务层吗?
编辑:
感谢@Dherik 的解释。我创建了一个测试类,它看起来像:
注意:我使用的是 JUnit5、Mockito 和 Spring 框架
@ExtendWith(SpringExtension.class)
class TodoServiceTest {
@MockBean
private TodoRepository todoRepository;
private TodoService todoService;
@BeforeEach
void setUp() {
todoService = new TodoService(todoRepository);
}
@AfterEach
void tearDown() {
clearInvocations(tanklevelRepository);
}
@Test
public void createTodo() {
todoService.createTodo(new Todo());
// verify if the save method is called when createTodo is called too
verify(todoRepository, times(1)).save(any(Todo.class));
}
}
Run Code Online (Sandbox Code Playgroud)
是的,这很重要。
即使是现在是一个非常简单的类,也许在未来的某个开发人员可以在这个方法中添加一些奇怪的情况createTodo是,Todo不再被保存。
如果您为实际方法编写测试以验证是否save调用了 ,则开发人员将被告知如果他进行一些影响Todo保存的更改的情况。
看一个伪测试示例:
@Test
public void createTodo() {
TodoRepository todoRepository = mock(TodoRepository.class);
TodoService todoService = new TodoService(todoRepository);
todoService.createTodo(new Todo());
// verify if the save method is called when createTodo is called too
verify(todoRepository, times(1)).save(any(Todo.class));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9875 次 |
| 最近记录: |