Context Configuration with Context Initializers

如需使用上下文初始值设置器为测试配置 ApplicationContext,请使用 @ContextConfiguration 对测试类进行注释,并使用包含实现 ApplicationContextInitializer 类的引用数组来配置 initializers 属性。然后,声明的上下文初始值设置器用于初始化为测试加载的 ConfigurableApplicationContext。请注意,每个声明的初始值设置器所支持的具体 ConfigurableApplicationContext 类型必须与由所使用的 SmartContextLoader 创建的 ApplicationContext 的类型兼容(通常为 GenericApplicationContext)。此外,初始值设置器的调用顺序取决于它们是否实现 Spring 的 Ordered 接口,或用 Spring 的 @Order 注释或标准 @Priority 注释进行注释。以下示例演示了如何使用初始值设置器:

Java
@ExtendWith(SpringExtension.class)
// ApplicationContext will be loaded from TestConfig
// and initialized by TestAppCtxInitializer
@ContextConfiguration(
	classes = TestConfig.class,
	initializers = TestAppCtxInitializer.class) (1)
class MyTest {
	// class body...
}
1 使用一个配置文件类和一个初始化器来指定配置。
Kotlin
@ExtendWith(SpringExtension::class)
// ApplicationContext will be loaded from TestConfig
// and initialized by TestAppCtxInitializer
@ContextConfiguration(
		classes = [TestConfig::class],
		initializers = [TestAppCtxInitializer::class]) (1)
class MyTest {
	// class body...
}
2 使用一个配置文件类和一个初始化器来指定配置。

你也可以完全省略 @ContextConfiguration 中 XML 配置文件、Groovy 脚本或组件类的声明,只需声明 ApplicationContextInitializer 类,这些类负责在上下文中注册 bean,例如通过以编程方式从 XML 文件或配置文件加载 bean 定义。以下示例演示如何执行此操作:

Java
@ExtendWith(SpringExtension.class)
// ApplicationContext will be initialized by EntireAppInitializer
// which presumably registers beans in the context
@ContextConfiguration(initializers = EntireAppInitializer.class) 1
class MyTest {
	// class body...
}
1 仅使用一个初始化器来指定配置。
Kotlin
@ExtendWith(SpringExtension::class)
// ApplicationContext will be initialized by EntireAppInitializer
// which presumably registers beans in the context
@ContextConfiguration(initializers = [EntireAppInitializer::class]) (1)
class MyTest {
	// class body...
}
2 仅使用一个初始化器来指定配置。