Key Abstractions
该框架的核心由 TestContextManager
类和 TestContext
、TestExecutionListener
和 SmartContextLoader
接口组成。为每个测试类创建一个 TestContextManager
(例如,用于在 JUnit Jupiter 中单个测试类中的所有测试方法的执行)。反过来,TestContextManager
管理了一个 TestContext
,其中包含当前测试的上下文。TestContextManager
还随着测试的进行更新 TestContext
的状态,并委托给 TestExecutionListener
实现,该实现通过提供依赖项注入、管理事务等对实际测试执行进行设置。一个 SmartContextLoader
负责为给定的测试类加载一个 ApplicationContext
。请参阅 javadoc 和 Spring 测试套件以获取更多信息和各种实现的示例。
TestContext
TestContext
封装了运行测试的环境(与正在使用的实际测试框架无关),并为其负责的测试实例提供上下文管理和缓存支持。如果需要,TestContext
也会委派一个 SmartContextLoader
加载 ApplicationContext
。
TestContextManager
TestContextManager
是 Spring TestContext 框架的主要入口点,负责管理一个 TestContext
,并在明确定义的测试执行点向每个已注册的 TestExecutionListener
发出事件:
-
在特定测试框架的任何 "`before class`"或 "`before all`"方法之前。
-
Test instance post-processing.
-
在特定测试框架的任何 "`before`"或 "`before each`"方法之前。
-
测试方法执行之前,但在测试设置之后。
-
测试方法执行之后,但在测试销毁之前。
-
某个特定测试框架的任何 “after” 或 “after each” 方法之后。
-
某个特定测试框架的任何 “after class” 或 “after all” 方法之后。
TestExecutionListener
TestExecutionListener
定义了对 TestContextManager
发布的测试执行事件做出反应的 API,监听器使用该 API 进行注册。请参见 TestExecutionListener
Configuration。
Context Loaders
ContextLoader
是一个策略接口,用于为 Spring TestContext 框架管理的集成测试加载 ApplicationContext
。您应该实现 SmartContextLoader
而不是此接口,以提供对组件类、活动 Bean 定义配置文件、测试属性来源、上下文层次结构和 WebApplicationContext
支持的支持。
SmartContextLoader
是 ContextLoader
接口的扩展,它取代了原始的最小 ContextLoader
SPI。具体而言,SmartContextLoader
可以选择处理资源位置、组件类或上下文初始化器。此外,SmartContextLoader
可以在其加载的上下文中设置活动 Bean 定义配置文件和测试属性来源。
Spring 提供以下实现:
-
DelegatingSmartContextLoader
: 两个默认加载器之一,根据为测试类声明的配置或默认位置或默认配置类的存在,在内部委托给AnnotationConfigContextLoader
、GenericXmlContextLoader
或GenericGroovyXmlContextLoader
。只有当 Groovy 在类路径中时,才会启用 Groovy 支持。 -
WebDelegatingSmartContextLoader
: 两个默认加载器之一,根据为测试类声明的配置或默认位置或默认配置类的存在,在内部委托给AnnotationConfigWebContextLoader
、GenericXmlWebContextLoader
或GenericGroovyXmlWebContextLoader
。只有当测试类上存在@WebAppConfiguration
时,才会使用 WebContextLoader
。只有当 Groovy 在类路径中时,才会启用 Groovy 支持。 -
AnnotationConfigContextLoader
: 从组件类中加载标准ApplicationContext
。 -
AnnotationConfigWebContextLoader
: 从组件类中加载WebApplicationContext
。 -
GenericGroovyXmlContextLoader
: 从资源位置加载标准ApplicationContext
,这些资源是 Groovy 脚本 或 XML 配置文件。 -
GenericGroovyXmlWebContextLoader
: 从资源位置加载WebApplicationContext
,这些资源是 Groovy 脚本 或 XML 配置文件。 -
GenericXmlContextLoader
: 从 XML 资源位置加载标准ApplicationContext
。 -
GenericXmlWebContextLoader
: 从 XML 资源位置加载WebApplicationContext
。