我被要求为一个很大的SpringBoot项目中的服务创建一个集成测试,该项目会产生许多已实现的服务。执行该应用程序时,将部署所有这些服务-
我想避免部署与我正在为其创建测试的服务无关的所有服务。不幸的是,我对弹簧启动测试的经验还不如我所希望的那么多,因此我想知道解决这个问题的最佳方法是什么。
我当时正在考虑使用注解对所有不相关的服务进行@MockBean
注释,并@Autowire
在测试类中对所有相关的服务进行注释,但是我不确定这是否是正确的方法。谁能指出我正确的方向?
谢谢。
答案很大程度上取决于集成测试的范围。我将尝试介绍两种主要方法,您可以在Google上等待我们提供更多示例和详细信息。Spring
Boot测试文档
也是您的朋友。
切片
Spring Boot提供了称为slices的测试实用程序。例如,有一个片段用于测试您的控制器- @WebMvcTest
此测试将加载用于从HTTP和指定的控制器(@WebMvcTest(YourController.class)
)调用应用程序的所有配置。之后,您需要决定如何处理该控制器的依赖项。
您可以:
@MockBean
。@Import
(然后您必须再次处理新导入的依赖项的依赖项)。@AutoConfigureSomething
注释来完成。-所有切片基本上都是自动配置注释的组合,您可以随意将它们添加到测试中。例如,查看一下DataJpaTest上的注释,以了解添加功能来设置带有测试数据库的Spring Boot Data JPA所需的功能。每个测试最多可以包含一个切片,但是您可以导入任意数量的其他服务,配置,模拟,自动配置等。关键是-选择测试配置。具有新依赖性的新的不相关服务不应破坏现有测试。
SpringBootTest
另一种方法是@SpringBootTest
注释-方向相反-
默认情况下它会加载所有内容,并且您可以使用排除不需要的内容@MockBean
,@EnableAutoConfiguration(exclude=SomeClass)
等等。
添加新服务时,当然存在打破现有测试的危险。-这应该不会经常发生,因为所有内容都是自动配置的,但是仍然有可能,尤其是在具有更多配置的整体中。
我被要求在一个非常大的SpringBoot项目中为一个服务创建一个集成测试,该项目产生了几十个已实现的服务。当应用程序执行时,所有这些服务都被部署了——我希望避免部署与我正在为其创建测试的服务无关的所有服务。不幸的是,我(还)没有像我希望的那样有很多Spring启动测试的经验,因此我想知道解决这个问题的最佳方法是什么。 我曾考虑在测试类中使用注释对所有不相关的服务进行注释,并使用对所有相关服务进行
我想用liquibase变更集进行模拟数据的集成测试,如何使其不影响真实数据库?我从这里找到了部分想法,但我使用的是springboot,我希望有更简单的解决方案。
我对springfox和Swagger2都是新手。我一直在尝试将SpringFox/Swagger2与我的spring boot微服务集成以生成API文档。 我遵循了“http://springfox.github.io/springfox/docs/snapshot/”站点中给出的步骤。但是我没有成功的带来api文档页面。 每当我试图点击URL“http://localhost:8081/swa
我希望文档的显示方式类似于它在特定于应用程序的上下文路径下的文档中提到的方式。你能告诉我我错过了什么吗?
在我的springboot应用程序中,我使用以下类执行集成测试 下面是在我的测试配置类中定义的bean 不过,只创建生产bean而不创建主bean。
集成测试: 当我偶尔运行这个测试时,一切都很好,但是当我和其他测试一起运行它时,没有使用模拟的ServerThroughRabbitMQ,所以一些spring缓存强制使用旧的rabbit侦听器。 我试图调试它,我可以看到,正确的bean被autowired到测试中,但由于某些原因旧监听器使用(旧bean字段instanceID=1新mocked bean instanceID=3),测试失败(不确