小编典典

在整体式SpringBoot应用程序中创建集成测试

java

我被要求为一个很大的SpringBoot项目中的服务创建一个集成测试,该项目会产生许多已实现的服务。执行该应用程序时,将部署所有这些服务-
我想避免部署与我正在为其创建测试的服务无关的所有服务。不幸的是,我对弹簧启动测试的经验还不如我所希望的那么多,因此我想知道解决这个问题的最佳方法是什么。

我当时正在考虑使用注解对所有不相关的服务进行@MockBean注释,并@Autowire在测试类中对所有相关的服务进行注释,但是我不确定这是否是正确的方法。谁能指出我正确的方向?

谢谢。


阅读 234

收藏
2020-11-26

共1个答案

小编典典

答案很大程度上取决于集成测试的范围。我将尝试介绍两种主要方法,您可以在Google上等待我们提供更多示例和详细信息。Spring
Boot测试文档
也是您的朋友。

切片

Spring Boot提供了称为slices的测试实用程序。例如,有一个片段用于测试您的控制器- @WebMvcTest此测试将加载用于从HTTP和指定的控制器(@WebMvcTest(YourController.class))调用应用程序的所有配置。之后,您需要决定如何处理该控制器的依赖项。

您可以:

  • 用它们嘲笑他们@MockBean
  • 提供真正的实现(或其他配置)@Import(然后您必须再次处理新导入的依赖项的依赖项)。
  • 加载Spring Boot自动配置的其他部分。这可以使用@AutoConfigureSomething注释来完成。-所有切片基本上都是自动配置注释的组合,您可以随意将它们添加到测试中。例如,查看一下DataJpaTest上的注释,以了解添加功能来设置带有测试数据库的Spring Boot Data JPA所需的功能。

每个测试最多可以包含一个切片,但是您可以导入任意数量的其他服务,配置,模拟,自动配置等。关键是-选择测试配置。具有新依赖性的新的不相关服务不应破坏现有测试。

SpringBootTest

另一种方法是@SpringBootTest注释-方向相反-
默认情况下它会加载所有内容,并且您可以使用排除不需要的内容@MockBean@EnableAutoConfiguration(exclude=SomeClass)等等。

添加新服务时,当然存在打破现有测试的危险。-这应该不会经常发生,因为所有内容都是自动配置的,但是仍然有可能,尤其是在具有更多配置的整体中。

2020-11-26