我们在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环境中?
1条答案
按热度按时间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
因此没有缓存的上下文可用,将启动一个新的上下文。