参考官网 Testing
上下文缓存
一旦 TestContext 框架为测试加载了ApplicationContext
(或WebApplicationContext
),该上下文将被缓存并重用于所有后续测试,这些测试在同一测试套件中声明相同的唯一上下文配置。要了解缓存的工作原理,了解“唯一”和“测试套件”的含义很重要。
一个ApplicationContext
可通过的是,用于加载配置参数的组合来唯一地标识。因此,配置参数的唯一组合用于生成缓存上下文的密钥。TestContext 框架使用以下配置参数来构建上下文缓存键:
-
locations
(来自@ContextConfiguration
) -
classes
(来自@ContextConfiguration
) -
contextInitializerClasses
(来自@ContextConfiguration
) -
contextCustomizers
(fromContextCustomizerFactory
) – 这包括@DynamicPropertySource
Spring Boot 测试支持中的方法和各种特性,例如@MockBean
和@SpyBean
。 -
contextLoader
(来自@ContextConfiguration
) -
parent
(来自@ContextHierarchy
) -
activeProfiles
(来自@ActiveProfiles
) -
propertySourceLocations
(来自@TestPropertySource
) -
propertySourceProperties
(来自@TestPropertySource
) -
resourceBasePath
(来自@WebAppConfiguration
)
例如,如果为 的 (or ) 属性TestClassA
指定,则 TestContext 框架加载相应的并将其存储在上下文缓存中,键位于仅基于这些位置的键下。因此,如果还定义 了它的位置(通过继承显式或隐式)但没有定义不同的 、不同的活动配置文件、不同的上下文初始值设定项、不同的测试属性源或不同的父上下文,则 两者共享相同的测试类。这意味着加载应用程序上下文的设置成本仅发生一次(每个测试套件),并且后续的测试执行速度要快得多。{"app-config.xml", "test-config.xml"}
locations
value
@ContextConfiguration
ApplicationContext
static
TestClassB
{"app-config.xml", "test-config.xml"}
@WebAppConfiguration
ContextLoader
ApplicationContext