|
对于最新的稳定版本,请使用 Spring Framework 6.2.7! |
上下文缓存
一旦 TestContext 框架加载了一个ApplicationContext(或WebApplicationContext)
对于测试,该上下文将被缓存并重新用于所有声明
同一测试套件中相同的唯一上下文配置。了解如何缓存
有效,理解 “unique” 和 “test suite” 的含义非常重要。
一ApplicationContext可以通过配置的组合来唯一标识
参数。因此,配置的独特组合
parameters 用于生成缓存上下文的 key。The TestContext
框架使用以下配置参数来构建上下文缓存键:
-
locations(来自@ContextConfiguration) -
classes(来自@ContextConfiguration) -
contextInitializerClasses(来自@ContextConfiguration) -
contextCustomizers(来自ContextCustomizerFactory) – 这包括@DynamicPropertySource方法以及 Spring Boot 的 测试支持,例如@MockBean和@SpyBean. -
contextLoader(来自@ContextConfiguration) -
parent(来自@ContextHierarchy) -
activeProfiles(来自@ActiveProfiles) -
propertySourceDescriptors(来自@TestPropertySource) -
propertySourceProperties(来自@TestPropertySource) -
resourceBasePath(来自@WebAppConfiguration)
例如,如果TestClassA指定{"app-config.xml", "test-config.xml"}对于locations(或value) 属性的@ContextConfiguration、TestContext 框架
加载相应的ApplicationContext并将其存储在static上下文缓存
在仅基于这些位置的键下。因此,如果TestClassB还定义了{"app-config.xml", "test-config.xml"}对于其位置(显式或
隐式地通过继承),但未定义@WebAppConfiguration,则ContextLoader、不同的活动配置文件、不同的上下文初始化器、不同的
test 属性源,或者不同的父上下文,则相同的ApplicationContext由两个测试类共享。这意味着加载应用程序的设置成本
context 仅发生一次(每个测试套件),并且后续测试执行很多
更快。
|
测试套件和分叉流程
Spring TestContext 框架将应用程序上下文存储在静态缓存中。这
意味着上下文实际上存储在 要从缓存机制中受益,所有测试都必须在同一进程或测试中运行
套房。这可以通过在 IDE 中作为一个组执行所有测试来实现。同样地
使用 Ant、Maven 或 Gradle 等构建框架执行测试时,它是
请务必确保 Build Framework 不会在测试之间分叉。例如
如果 |
上下文缓存的大小以默认最大大小 32 为界。每当
达到最大大小,则使用最近最少使用 (LRU) 的驱逐策略进行驱逐,并且
关闭过时的上下文。您可以从命令行或内部版本配置最大大小
script 中,通过设置名为spring.test.context.cache.maxSize.作为
或者,您可以通过SpringProperties机制。
由于在给定的测试套件中加载了大量的应用程序上下文
导致套件需要不必要地长时间运行,这通常是有益的
确切地知道已经加载和缓存了多少个上下文。要查看
底层上下文缓存中,您可以为org.springframework.test.context.cachelogging 类别设置为DEBUG.
在不太可能的情况下,测试会损坏应用程序上下文并需要重新加载
(例如,通过修改 Bean 定义或应用程序对象的状态),则
可以使用@DirtiesContext(参见@DirtiesContext在 Spring Testing Annotations 中)。这指示 Spring 从缓存中删除上下文并重新构建
运行需要相同应用程序的下一个测试之前的应用程序上下文
上下文。请注意,对@DirtiesContext注解由DirtiesContextBeforeModesTestExecutionListener和DirtiesContextTestExecutionListener,默认情况下处于启用状态。
|
ApplicationContext 生命周期和控制台日志记录
当你需要调试使用 Spring TestContext 框架执行的测试时,它可以
可用于分析控制台输出(即输出到 关于由 Spring 框架本身或组件触发的控制台日志记录
在 这 这
如果上下文根据 当 Spring |