我想在不使用 @SpringBootTest 的情况下测试控制器

jon*_*jon 5 java unit-testing spring-boot

我有以下测试类:

@SpringBootTest
public class ChoreControllerTest
{
    @Autowired 
    private ChoreController controller;

    @Test
    public void throwOnMissingChore()
    {
        assertThrows(ChoreNotFoundException.class, () -> this.controller.getChore(0L));
    }
}
Run Code Online (Sandbox Code Playgroud)

Spring Boot 启动大约需要 5 秒,然后测试就可以运行。我想减少这个时间,但如果我只是删除@SpringBootTest注释,我只会得到一个 NPE。

有没有办法让这个控制器测试更加轻量级,或者我是否被启动时间所困扰?我特别担心如果我想测试多个控制器,我的测试时间会发生什么......

tob*_*hai 5

注释@SpringBootTest会为您创建一个 Spring 上下文,因此启动需要一段时间。该注解主要用于需要 Spring 上下文的集成测试。以下是优化集成测试的一些技巧。如果删除注释,ChoreController 无法自动装配(没有可用的上下文),这会导致 NullpointerException。
根据您的需要,您可以使用像 Mockito 这样的 Mocking 库来注入模拟,例如您的控制器类需要的服务,并在没有@SpringBootTest.

您可能想看看这篇文章以正确设置这些模拟。