上下文管理

每个 TestContext 为其所负责的测试实例提供上下文管理和缓存支持。测试实例不会自动获得对已配置的 ApplicationContext 的访问权限。然而,如果测试类实现了 ApplicationContextAware 接口,则会向该测试实例提供一个 ApplicationContext 的引用。请注意,AbstractJUnit4SpringContextTestsAbstractTestNGSpringContextTests 已经实现了 ApplicationContextAware 接口,因此会自动提供对 ApplicationContext 的访问。spring-doc.cadn.net.cn

@Autowired ApplicationContext

作为实现 ApplicationContextAware 接口的替代方案,您可以使用 @Autowired 注解将应用上下文注入到您的测试类中,该注解可应用于字段或 setter 方法,如下例所示:spring-doc.cadn.net.cn

@SpringJUnitConfig
class MyTest {

	@Autowired (1)
	ApplicationContext applicationContext;

	// class body...
}
1 注入 ApplicationContext
@SpringJUnitConfig
class MyTest {

	@Autowired (1)
	lateinit var applicationContext: ApplicationContext

	// class body...
}
1 注入 ApplicationContext

同样地,如果你的测试配置为加载一个 WebApplicationContext,你可以将 Web 应用上下文注入到你的测试中,如下所示:spring-doc.cadn.net.cn

@SpringJUnitWebConfig (1)
class MyWebAppTest {

	@Autowired (2)
	WebApplicationContext wac;

	// class body...
}
1 配置 WebApplicationContext
2 注入 WebApplicationContext
@SpringJUnitWebConfig (1)
class MyWebAppTest {

	@Autowired (2)
	lateinit var wac: WebApplicationContext
	// class body...
}
1 配置 WebApplicationContext
2 注入 WebApplicationContext

使用 @Autowired 进行的依赖注入由 DependencyInjectionTestExecutionListener 提供,该监听器默认已配置(参见测试夹具的依赖注入)。spring-doc.cadn.net.cn

使用 TestContext 框架的测试类无需继承特定类或实现特定接口来配置其应用上下文。相反,只需在类级别上声明 @ContextConfiguration 注解即可完成配置。如果你的测试类未显式声明组件类或资源位置,则所配置的 ContextLoader 将决定如何从默认配置类或默认位置加载上下文。除了组件类和上下文资源位置外,应用上下文还可以通过上下文定制器上下文初始化器进行配置。spring-doc.cadn.net.cn

以下各节说明如何使用 @ContextConfiguration 及相关注解,通过组件类(通常为 ApplicationContext 类)、XML 配置文件、Groovy 脚本、上下文定制器或上下文初始化器来配置测试用的 @Configuration。此外,对于高级用例,您也可以实现并配置自己的自定义 SmartContextLoaderspring-doc.cadn.net.cn