我被要求为一个很大的SpringBoot项目中的服务创建一个集成测试,该项目会产生许多已实现的服务。执行该应用程序时,将部署所有这些服务- 我想避免部署与我正在为其创建测试的服务无关的所有服务。不幸的是,我对弹簧启动测试的经验还不如我所希望的那么多,因此我想知道解决这个问题的最佳方法是什么。
我当时正在考虑使用注解对所有不相关的服务进行@MockBean注释,并@Autowire在测试类中对所有相关的服务进行注释,但是我不确定这是否是正确的方法。谁能指出我正确的方向?
@MockBean
@Autowire
谢谢。
答案很大程度上取决于集成测试的范围。我将尝试介绍两种主要方法,您可以在Google上等待我们提供更多示例和详细信息。Spring Boot测试文档也是您的朋友。
切片
Spring Boot提供了称为slices的测试实用程序。例如,有一个片段用于测试您的控制器- @WebMvcTest此测试将加载用于从HTTP和指定的控制器(@WebMvcTest(YourController.class))调用应用程序的所有配置。之后,您需要决定如何处理该控制器的依赖项。
@WebMvcTest
@WebMvcTest(YourController.class)
您可以:
@Import
@AutoConfigureSomething
每个测试最多可以包含一个切片,但是您可以导入任意数量的其他服务,配置,模拟,自动配置等。关键是-选择测试配置。具有新依赖性的新的不相关服务不应破坏现有测试。
SpringBootTest
另一种方法是@SpringBootTest注释-方向相反- 默认情况下它会加载所有内容,并且您可以使用排除不需要的内容@MockBean,@EnableAutoConfiguration(exclude=SomeClass)等等。
@SpringBootTest
@EnableAutoConfiguration(exclude=SomeClass)
添加新服务时,当然存在打破现有测试的危险。-这应该不会经常发生,因为所有内容都是自动配置的,但是仍然有可能,尤其是在具有更多配置的整体中。