运行 spring 使用 gradle 并行启动测试创建两个应用程序上下文
Running spring boot tests parallelly using gradle create two application contexts
我们有 2 个 spring 引导集成测试 运行nig on Netty。
我们使用 gradle 到 运行 使用标志并行测试: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')
依赖集(组:'org.springframework.boot',版本:'2.4.4')
这是正常的行为,因为在一种情况下:使用了模拟网络环境,而在另一个真实网络环境中?
在使用 Spring 测试上下文框架时,它将执行 context caching。当使用相同的上下文配置时,它将重新使用现有的上下文(或者如果不存在则启动一个)。如果有新的配置组合(在您的情况下,运行时有所不同,即启动真实服务器或使用模拟环境),它将启动一个新的。
来自上述参考指南:
An ApplicationContext
can be uniquely identified by the combination of configuration parameters that are used to load it. Consequently, the unique combination of configuration parameters is used to generate a key under which the context is cached. The TestContext framework uses the following configuration parameters to build the context cache key:
locations
(from @ContextConfiguration
)
classes
(from @ContextConfiguration
)
contextInitializerClasses
(from @ContextConfiguration
)
contextCustomizers
(from ContextCustomizerFactory
) – this includes @DynamicPropertySource
methods as well as various features from Spring Boot’s testing support such as @MockBean
and @SpyBean
.
contextLoader
(from @ContextConfiguration
)
parent
(from @ContextHierarchy
)
activeProfiles
(from @ActiveProfiles
)
propertySourceLocations
(from @TestPropertySource
)
propertySourceProperties
(from @TestPropertySource
)
resourceBasePath
(from @WebAppConfiguration
)
在这种情况下,由于运行时不同,contextCustomizers
存在差异,因此没有可用的缓存上下文,将启动一个新的。
我们有 2 个 spring 引导集成测试 运行nig on Netty。
我们使用 gradle 到 运行 使用标志并行测试: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')
依赖集(组:'org.springframework.boot',版本:'2.4.4')
这是正常的行为,因为在一种情况下:使用了模拟网络环境,而在另一个真实网络环境中?
在使用 Spring 测试上下文框架时,它将执行 context caching。当使用相同的上下文配置时,它将重新使用现有的上下文(或者如果不存在则启动一个)。如果有新的配置组合(在您的情况下,运行时有所不同,即启动真实服务器或使用模拟环境),它将启动一个新的。
来自上述参考指南:
An
ApplicationContext
can be uniquely identified by the combination of configuration parameters that are used to load it. Consequently, the unique combination of configuration parameters is used to generate a key under which the context is cached. The TestContext framework uses the following configuration parameters to build the context cache key:
locations
(from@ContextConfiguration
)classes
(from@ContextConfiguration
)contextInitializerClasses
(from@ContextConfiguration
)contextCustomizers
(fromContextCustomizerFactory
) – this includes@DynamicPropertySource
methods as well as various features from Spring Boot’s testing support such as@MockBean
and@SpyBean
.contextLoader
(from@ContextConfiguration
)parent
(from@ContextHierarchy
)activeProfiles
(from@ActiveProfiles
)propertySourceLocations
(from@TestPropertySource
)propertySourceProperties
(from@TestPropertySource
)resourceBasePath
(from@WebAppConfiguration
)
在这种情况下,由于运行时不同,contextCustomizers
存在差异,因此没有可用的缓存上下文,将启动一个新的。