上下文管理

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

@Autowired ApplicationContext

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

  • Java

  • Kotlin

@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应用程序上下文注入到您的测试中,如下所示:

  • Java

  • Kotlin

@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提供的,默认已配置(请参阅测试固件的依赖注入)。

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

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