关键抽象

框架的核心由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”方法之前。

  • 测试实例后处理。

  • 在特定测试框架的任何“before”或“before each”方法之前。

  • 在测试方法执行之前立即执行,但在测试设置之后。

  • 在测试方法执行之后立即执行,但在测试拆卸之前。

  • 在特定测试框架的任何“after”或“after each”方法之后。

  • 在特定测试框架的任何“after class”或“after all”方法之后。

TestExecutionListener

TestExecutionListener定义了对TestContextManager发布的测试执行事件做出反应的 API,该监听器已与其注册。请参阅TestExecutionListener 配置

上下文加载器

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