SpringBootTest - 只创建必要的 beans

SprintBootTest - create only necessary beans

我有一个类似下面的代码:

@RunWith(SpringRunner.class)
@SpringBootTest
public class ModelRunnerTest {

    @Autowired
    private SomeRepository repository;

    @Autowired
    private SomeSearcher someSearcher;


    @Test
    public void test(){
        someSearcher.search(repository);
    }
}

它有效——但也在与创建的 2 个 bean 相同的上下文中创建所有 bean。 这可能需要很长时间(我 运行 每 build/deploy 测试一次)。

所以,我想找到一种方法让测试只加载测试所需的bean。在这个例子中,它只是 repository & someSearcher.

我知道我可以使用@BeanMock 为 bean 提供替代实现,但仍将创建 bean 的实际实现(尽管未使用)。

有什么建议吗?

您可以使用 @ContextConfiguration instead of @SpringBootTest to create a custom Spring context for particular classes. Spring Boot further simplifies this with classes designed for particular use-cases e.g. @WebMvcTest or @DataJdbcTest

但是这种方法有两个主要缺点:

  1. 您实际上在这个新的有限上下文中测试什么?绝对不是生产应用程序,因为您没有启动整个 Spring 上下文。这可能导致测试遗漏错误,例如可能不会发现 bean 覆盖问题。

  2. 如果可能,
  3. SpringRunner 将尝试在测试之间重用 Spring 上下文。当您有多个测试时,一次启动一个大上下文并在所有测试中共享它可能会更快。