上下文管理

每个 TestContext 为其负责的测试实例提供上下文管理和缓存支持。 测试实例不会自动获得对已配置的 ApplicationContext 的访问权限。 但是,如果测试类实现了 ApplicationContextAware 接口,则会将对 ApplicationContext 的引用提供给测试实例。 请注意,AbstractJUnit4InfraContextTestsAbstractTestNGInfraContextTests 实现了 ApplicationContextAware,因此会自动提供对 ApplicationContext 的访问。

@Autowired ApplicationContext

作为实现 ApplicationContextAware 接口的替代方法,您可以通过字段或 setter 方法上的 @Autowired 注解为测试类注入应用程序上下文,如以下示例所示:

  • Java

@JUnitConfig
class MyTest {

  @Autowired (1)
  ApplicationContext applicationContext;

  // 类体...
}
1 注入 ApplicationContext

同样,如果您的测试配置为加载 WebApplicationContext,则可以将 Web 应用程序上下文注入到您的测试中,如下所示:

  • Java

@JUnitWebConfig (1)
class MyWebAppTest {

  @Autowired (2)
  WebApplicationContext wac;

  // 类体...
}
1 配置 WebApplicationContext
2 注入 WebApplicationContext

使用 @Autowired 的依赖注入由 DependencyInjectionTestExecutionListener 提供,它是默认配置的 (请参阅 测试夹具的依赖注入)。

使用 TestContext 框架的测试类不需要扩展任何特定类或实现特定接口来配置其应用程序上下文。 相反,通过在类级别声明 @ContextConfiguration 注解来实现配置。 如果您的测试类没有显式声明应用程序上下文资源位置或组件类,则配置的 ContextLoader 将确定如何从默认位置或默认配置类加载上下文。 除了上下文资源位置和组件类之外,还可以通过应用程序上下文初始化器配置应用程序上下文。

以下部分说明了如何使用 Infra @ContextConfiguration 注解通过 XML 配置文件、Groovy 脚本、组件类(通常为 @Configuration 类)或上下文初始化器来配置测试 ApplicationContext。 或者,您可以实现并配置自己的自定义 SmartContextLoader 以用于高级用例。