对于最新的稳定版本,请使用 Spring Framework 7.0.6!spring-doc.cadn.net.cn

上下文管理

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

@Autowired ApplicationContext

作为实现ApplicationContextAware接口的替代方案,您可以通过在字段或setter方法上使用@Autowired注解为测试类注入应用程序上下文,如下例所示: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

以下章节将介绍如何使用 Spring 的 @ContextConfiguration 注解,通过 XML 配置文件、Groovy 脚本、 组件类(通常是 @Configuration 类)或上下文初始化器来配置测试 ApplicationContext。 对于高级使用场景,您也可以实现并配置自定义的 SmartContextLoaderspring-doc.cadn.net.cn