|
对于最新稳定版本,请使用Spring Framework 7.0.1! |
上下文缓存
一旦TestContext框架加载了应用上下文(或WebApplicationContext)
对于测试,该上下文会被缓存并用于所有后续声明
在同一测试套件中,使用相同的独特上下文配置。理解缓存的原理
理解“独特”和“测试套件”的含义非常重要。
一应用上下文可以通过配置组合唯一识别
这些参数用于加载它。因此,配置的独特组合
参数用于生成缓存上下文的键。测试上下文
Framework 使用以下配置参数构建上下文缓存键:
-
地点(摘自@ContextConfiguration) -
类(摘自@ContextConfiguration) -
contextInitializerClasses(摘自@ContextConfiguration) -
contextCustomizers(摘自ContextCustomizerFactory)——这包括@DynamicPropertySource方法以及Spring Boot的各种功能 测试支持,例如@MockBean和@SpyBean. -
contextLoader(摘自@ContextConfiguration) -
父母(摘自@ContextHierarchy) -
activeProfiles(摘自@ActiveProfiles) -
propertySourceDescriptors(摘自@TestPropertySource) -
propertySourceProperties(摘自@TestPropertySource) -
resourceBasePath(摘自@WebAppConfiguration)
例如,如果测试A组指定{“app-config.xml”,“test-config.xml”}对于地点(或值) 属性@ContextConfiguration测试上下文框架
负载对应的应用上下文并将其存储在静态的上下文缓存
在一个仅基于这些位置的密钥下。所以,如果测试B类也定义了{“app-config.xml”,“test-config.xml”}对于其位置(要么显式的,要么是
隐含通过继承)但不定义@WebAppConfiguration,不同的上下文加载器不同的活跃配置文件,不同的上下文初始化器,不同的
测试属性源,或者不同的父上下文,然后相同应用上下文两个测试类共享。这意味着加载应用程序的设置成本
上下文每套测试套件只产生一次,后续测试执行量很大
更快。
|
测试套件与分支进程
Spring TestContext 框架将应用上下文存储在静态缓存中。这
意味着上下文实际上存储在 为了利用缓存机制,所有测试必须在同一进程或测试中运行
套房。这可以通过在 IDE 内将所有测试作为一组执行来实现。同样地
当使用Ant、Maven或Gradle等构建框架执行测试时,则是
确保构建框架不会在测试之间分叉非常重要。例如
如果 |
上下文缓存的大小有限制,默认最大大小为32。每当
达到最大规模时,采用最近最少使用(LRU)驱逐政策进行驱逐,且
关闭陈旧的语境。你可以从命令行或构建中配置最大大小
通过设置一个名为spring.test.context.cache.maxSize.作为
另外,你也可以通过春季房产机制。
因为在给定的测试套件中加载大量应用上下文
如果导致套间运行时间过长,通常有益于
准确知道有多少上下文被加载和缓存。查看 的统计数据
底层上下文缓存,你可以设置日志级别org.springframework.test.context.cache日志分类 变为调试.
在极不可能的情况下,测试损坏了应用上下文并需要重新加载
(例如,通过修改 Bean 定义或应用对象的状态),你
可以为你的测试类或测试方法注释@DirtiesContext(参见讨论@DirtiesContext在春季测试注释中)。这会指示 Spring 从缓存中移除上下文并重建
在运行下一个需要相同应用的测试之前,先进行应用上下文
上下文。注意,对@DirtiesContext注释由DirtiesContextBeforeModesTestExecutionListener以及DirtiesContextTestExecutionListener,这些选项默认被启用。
|
ApplicationContext 生命周期与控制台日志
当你需要调试使用 Spring TestContext 框架执行的测试时,它可以是
分析控制台输出(即输出给 关于由 Spring Framework 本身或组件触发的控制台日志
注册在 这 这
如果上下文根据 Spring之时 |