跳到主要内容
版本:7.0.3

Spring TestContext 框架

Hunyuan 7b 中英对照 Spring TestContext Framework

Spring TestContext框架(位于org.springframework.test.context包中)提供了通用的、基于注解的单元测试和集成测试支持,这种支持与所使用的测试框架无关。TestContext框架也非常重视“约定优于配置”的原则,提供了合理的默认设置,你可以通过基于注解的配置来覆盖这些默认值。

除了通用的测试基础设施之外,TestContext框架还明确支持JUnit Jupiter、JUnit 4和TestNG。对于JUnit 4和TestNG,Spring提供了抽象支持类。此外,Spring还为JUnit 4提供了自定义的JUnit Runner和自定义的JUnit Rules,以及为JUnit Jupiter提供的自定义Extension,这些工具允许你编写所谓的POJO测试类。POJO测试类不需要继承特定的类层次结构,例如那些抽象支持类。

以下部分提供了TestContext框架内部结构的概述。如果您仅仅对使用该框架感兴趣,而不打算通过自定义监听器或自定义加载器来扩展它,那么可以直接跳转到配置(上下文管理依赖注入事务管理支持类以及注解支持这些章节。

部分总结

📄️ 关键抽象概念

该框架的核心由TestContextManager类以及TestContext、TestExecutionListener和SmartContextLoader接口组成。每个测试类都会创建一个TestContextManager(例如,在JUnit Jupiter中,用于执行单个测试类内的所有测试方法)。TestContextManager负责管理TestContext,后者保存当前测试的上下文。随着测试的进行,TestContextManager还会更新TestContext的状态,并将相关任务委托给TestExecutionListener的实现类,这些实现类通过提供依赖注入、管理事务等功能来实际执行测试。SmartContextLoader则负责为给定的测试类加载ApplicationContext。有关更多信息及各种实现的示例,请参阅Javadoc和Spring测试套件。

📄️ 测试夹具的依赖注入

当你使用DependencyInjectionTestExecutionListener(默认情况下是配置好的)时,你的测试实例的依赖项会从应用程序上下文中通过你使用@ContextConfiguration或相关注解配置的Bean中注入。你可以根据所选择的注解,以及这些注解是放在setter方法上还是字段上,来选择使用setter注入、字段注入,或者同时使用这两种方式。如果你使用的是JUnit Jupiter,还可以选择性地使用构造函数注入(详见“SpringExtension中的依赖注入”)。为了与Spring基于注解的注入支持保持一致,你也可以使用Spring的@Autowired注解,或者JSR-330标准中的@Inject注解来进行字段和setter注入。