java—使用gradle并行运行spring引导测试可以创建两个应用程序上下文

mwg9r5ms  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(404)

我们在netty上运行了两个spring-boot集成测试。
我们使用gradle使用flag并行运行测试: org.gradle.parallel=true 测试1: @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) 创建 org.springframework.boot.web.reactive.context.AnnotationConfigReactiveWebServerApplicationContext@3736a122 测试2: @SpringBootTest(webEnvironment = WebEnvironment.MOCK) 创建 org.springframework.boot.web.reactive.context.GenericReactiveWebApplicationContext@45fa13a7 创建两个应用程序上下文,并将其中一个应用程序上下文随机注入到生产代码中,因此我们有两组bean。
使用以下依赖项:
dependencyset(组:'org.springframework',版本:'5.3.5')
dependencyset(组:'org.springframework.boot',版本:'2.4.4')
是正常行为,因为在一种情况下:使用模拟web环境,而在另一个真实的web环境中?

bn31dyow

bn31dyow1#

当使用spring测试上下文框架时,它将进行上下文缓存。当使用相同的上下文配置时,它将重用现有的上下文(如果还没有上下文,则启动一个)。如果有一个新的配置组合(在您的情况下,运行时存在差异,即启动真正的服务器或使用模拟环境),它将启动一个新的配置组合。
根据上述参考指南:
ApplicationContext 可以通过用于加载它的配置参数的组合来唯一地标识。因此,使用配置参数的唯一组合来生成一个密钥,在该密钥下缓存上下文。testcontext框架使用以下配置参数来构建上下文缓存键: locations (来自 @ContextConfiguration ) classes (来自 @ContextConfiguration ) contextInitializerClasses (来自 @ContextConfiguration ) contextCustomizers (来自 ContextCustomizerFactory )–这包括 @DynamicPropertySource 方法以及SpringBoot测试支持的各种特性,例如 @MockBean 以及 @SpyBean . contextLoader (来自 @ContextConfiguration ) parent (来自 @ContextHierarchy ) activeProfiles (来自 @ActiveProfiles ) propertySourceLocations (来自 @TestPropertySource ) propertySourceProperties (来自 @TestPropertySource ) resourceBasePath (来自 @WebAppConfiguration )
在这种情况下,由于运行时不同,因此 contextCustomizers 因此没有缓存的上下文可用,将启动一个新的上下文。

相关问题