上下文管理
每个 TestContext
都为其负责的测试实例提供上下文管理和缓存支持。测试实例不会自动获得对已配置的 ApplicationContext
的访问权限。但是,如果测试类实现了 ApplicationContextAware
接口,则会将 ApplicationContext
的引用提供给测试实例。请注意,AbstractJUnit4SpringContextTests
和 AbstractTestNGSpringContextTests
都实现了 ApplicationContextAware
接口,因此会自动提供对 ApplicationContext
的访问。
@Autowired ApplicationContext
作为实现 |
- Java
-
@SpringJUnitConfig class MyTest { @Autowired [id="CO1-1"][id="CO1-1"][id="CO1-1"](1) ApplicationContext applicationContext; // class body... }
- <1> 注入
ApplicationContext
。Kotlin -
@SpringJUnitConfig class MyTest { @Autowired [id="CO2-1"][id="CO1-2"][id="CO1-2"](1) lateinit var applicationContext: ApplicationContext // class body... }
<1> 注入
ApplicationContext
。
类似地,如果您的测试配置为加载 WebApplicationContext
,您可以将 Web 应用程序上下文注入到您的测试中,如下所示:
- Java
-
@SpringJUnitWebConfig [id="CO3-1"][id="CO1-3"][id="CO2-1"](1) class MyWebAppTest { @Autowired [id="CO3-2"][id="CO1-4"][id="CO2-2"](2) WebApplicationContext wac; // class body... }
<1> 配置 `WebApplicationContext`。 <1> 注入 `WebApplicationContext`。Kotlin::
+
@SpringJUnitWebConfig [id="CO4-1"][id="CO1-5"][id="CO2-3"](1)
class MyWebAppTest {
@Autowired [id="CO4-2"][id="CO1-6"][id="CO2-4"](2)
lateinit var wac: WebApplicationContext
// class body...
}
<1> 配置 `WebApplicationContext`。 <1> 注入 `WebApplicationContext`。
通过使用 @Autowired
进行依赖注入由 DependencyInjectionTestExecutionListener
提供,该监听器默认配置(请参阅 测试夹具的依赖注入)。
使用 TestContext 框架的测试类不需要扩展任何特定类或实现特定接口来配置其应用程序上下文。相反,通过在类级别声明 @ContextConfiguration
注解来完成配置。如果您的测试类没有明确声明应用程序上下文资源位置或组件类,则配置的 ContextLoader
会确定如何从默认位置或默认配置类加载上下文。除了上下文资源位置和组件类之外,还可以通过应用程序上下文初始化器配置应用程序上下文。
以下部分解释了如何使用 Spring 的 @ContextConfiguration
注解通过 XML 配置文件、Groovy 脚本、组件类(通常是 @Configuration
类)或上下文初始化器来配置测试 ApplicationContext
。或者,您可以实现和配置自己的自定义 SmartContextLoader
以用于高级用例。