核心抽象
框架的核心由 TestContextManager 类以及 TestContext、TestExecutionListener 和
SmartContextLoader 接口组成。为每个测试类创建一个 TestContextManager(例如,用于
JUnit Jupiter 中单个测试类中所有测试方法的执行)。反过来,TestContextManager 管理一个
TestContext,该 TestContext 包含当前测试的上下文。TestContextManager 还会在测试进行过程中
更新 TestContext 的状态,并委托给 TestExecutionListener 实现,这些实现通过提供依赖注入、
管理事务等来实际执行测试。SmartContextLoader 负责为给定的测试类加载 ApplicationContext。
有关各种实现的更多信息和示例,请参阅 javadoc
和 Spring 测试套件。
TestContext
TestContext 封装了运行测试的上下文(与实际使用的测试框架无关),并为它负责的测试实例
提供了上下文管理和缓存支持。如果需要,TestContext 还会委托给 SmartContextLoader 来加载
ApplicationContext。
TestContextManager
TestContextManager 是 Spring TestContext Framework 的主要入口点,负责管理单个
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:从作为 Groovy 脚本或 XML 配置文件的资源位置加载标准ApplicationContext。 -
GenericGroovyXmlWebContextLoader:从作为 Groovy 脚本或 XML 配置文件的资源位置加载WebApplicationContext。 -
GenericXmlContextLoader:从 XML 资源位置加载标准ApplicationContext。 -
GenericXmlWebContextLoader:从 XML 资源位置加载WebApplicationContext。