上下文管理

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

@Autowired ApplicationContext

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

  • 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