假设我有两个类:
TodoRepository
是一个简单的 CRUD 存储库:public interface TodoRepository extends CrudRepository<T, ID> {
}
TodoService
只是一个调用这个 Repository 的类:@Service
public class TodoService{
private final TodoRepository todoRepository;
@Autowired
public TodoService(TodoRepository todoRepository) {
this.todoRepository = todoRepository;
}
public void createTodo(Todo todo) {
todoRepository.save(todo);
}
}
我应该费心测试服务层吗?
编辑:
感谢@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));
}
}
最佳答案
是的,这很重要。
即使现在是一个非常简单的类,也许 future 的一些开发人员可以在这个方法上添加一些奇怪的条件 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));
}
关于 Spring Boot : Testing the Service layer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53560667/