关键抽象
框架的核心由 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”方法之前。
-
测试实例后处理。
-
在特定测试框架的任何“before”或“before each”方法之前。
-
在执行测试方法之前,但测试设置之后立即执行。
-
在执行测试方法之后,但在测试拆卸之前立即执行。
-
在特定测试框架的任何“after”或“after each”方法之后。
-
在特定测试框架的任何“after class”或“after all”方法之后。
TestExecutionListener
TestExecutionListener
定义了对由注册监听器的 TestContextManager
发布的测试执行事件做出反应的 API。请参阅 TestExecutionListener
配置。
上下文加载器
ContextLoader
是一个策略接口,用于为 Spring TestContext Framework 管理的集成测试加载 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
。