Key Abstractions

该框架的核心由 TestContextManager 类和 TestContextTestExecutionListenerSmartContextLoader 接口组成。为每个测试类创建一个 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 支持的支持。

SmartContextLoaderContextLoader 接口的扩展,它取代了原始的最小 ContextLoader SPI。具体而言,SmartContextLoader 可以选择处理资源位置、组件类或上下文初始化器。此外,SmartContextLoader 可以在其加载的上下文中设置活动 Bean 定义配置文件和测试属性来源。

Spring 提供以下实现:

  • DelegatingSmartContextLoader: 两个默认加载器之一,根据为测试类声明的配置或默认位置或默认配置类的存在,在内部委托给 AnnotationConfigContextLoaderGenericXmlContextLoaderGenericGroovyXmlContextLoader。只有当 Groovy 在类路径中时,才会启用 Groovy 支持。

  • WebDelegatingSmartContextLoader: 两个默认加载器之一,根据为测试类声明的配置或默认位置或默认配置类的存在,在内部委托给 AnnotationConfigWebContextLoaderGenericXmlWebContextLoaderGenericGroovyXmlWebContextLoader。只有当测试类上存在 @WebAppConfiguration 时,才会使用 Web ContextLoader。只有当 Groovy 在类路径中时,才会启用 Groovy 支持。

  • AnnotationConfigContextLoader: 从组件类中加载标准 ApplicationContext

  • AnnotationConfigWebContextLoader: 从组件类中加载 WebApplicationContext

  • GenericGroovyXmlContextLoader: 从资源位置加载标准 ApplicationContext,这些资源是 Groovy 脚本 或 XML 配置文件。

  • GenericGroovyXmlWebContextLoader: 从资源位置加载 WebApplicationContext,这些资源是 Groovy 脚本 或 XML 配置文件。

  • GenericXmlContextLoader: 从 XML 资源位置加载标准 ApplicationContext

  • GenericXmlWebContextLoader: 从 XML 资源位置加载 WebApplicationContext