gpt4 book ai didi

Spring Boot : Testing the Service layer

转载 作者:行者123 更新时间:2023-12-03 15:56:58 25 4
gpt4 key购买 nike

假设我有两个类:

  • TodoRepository
  • TodoService
  • 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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com