我被要求为一个非常大的 SpringBoot 项目中的一个服务创建一个集成测试,该项目产生了数十个已实现的服务。执行应用程序时,会部署所有这些服务 - 我想避免部署与我正在为其创建测试的服务无关的所有服务。不幸的是,我(还)没有像我希望的那样有足够的 Spring Boot 测试经验,因此我想知道解决这个问题的最佳方法是什么。
我正在考虑用注释所有不相关的服务@MockBean
注释和所有相关的@Autowire
在测试类中,但我不确定这是否是正确的方法。有人能指出我正确的方向吗?
谢谢。
答案很大程度上取决于集成测试的范围。我将尝试介绍两种主要方法,您可以在谷歌上搜索更多示例和详细信息。Spring Boot 测试文档也是你的朋友。
Slices
Spring Boot 提供了名为slices。例如,有一个用于测试控制器的切片 -@WebMvcTest- 此测试将加载从 HTTP 和指定控制器调用应用程序的所有配置(@WebMvcTest(YourController.class)
)。之后,您需要决定如何处理该控制器的依赖项。
You can:
- 嘲笑他们
@MockBean
.
- 提供真实的实现(或附加配置)
@Import
(然后你必须再次处理新导入的依赖项的依赖项)。
- 加载 Spring Boot 自动配置的附加部分。这可以使用以下方法完成
@AutoConfigureSomething
注释。 - 所有切片基本上都是自动配置注释的组合,您可以自由地将它们添加到您的测试中。例如看看DataJpaTest 上的注释了解如何添加使用测试数据库设置 Spring Boot Data JPA 的功能。
每个测试最多可以有一个切片,但您可以导入任意数量的附加服务、配置、模拟、自动配置等。重点是 - 您选择为测试配置的内容;具有新依赖项的新的不相关服务不应破坏现有测试。
SpringBoot测试
另一种方法是@SpringBootTest
注释 - 这是相反的方向 - 默认情况下它加载所有内容,你可以排除你不想要的东西@MockBean
, @EnableAutoConfiguration(exclude=SomeClass)
etc.
添加新服务时当然存在破坏现有测试的危险。 - 这种情况应该不会经常发生,因为所有内容都是自动配置的,但它仍然是可能的,特别是在具有更多配置的整体中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)