使用上下文初始化器进行上下文配置
要使用上下文初始化器为你的测试配置 ApplicationContext
,请在测试类上使用 @ContextConfiguration
注解,并通过 initializers
属性配置一个包含实现 ApplicationContextInitializer
的类的引用数组。然后,声明的上下文初始化器将用于初始化为你的测试加载的 ConfigurableApplicationContext
。请注意,每个声明的初始化器支持的具体 ConfigurableApplicationContext
类型必须与正在使用的 SmartContextLoader
创建的 ApplicationContext
类型兼容(通常是 GenericApplicationContext
)。此外,初始化器的调用顺序取决于它们是否实现了 Spring 的 Ordered
接口,或者是否使用 Spring 的 @Order
注解或标准的 @Priority
注解进行注解。以下示例展示了如何使用初始化器:
- Java
- Kotlin
@ExtendWith(SpringExtension.class)
// ApplicationContext 将从 TestConfig 加载
// 并由 TestAppCtxInitializer 初始化
@ContextConfiguration(
classes = TestConfig.class,
initializers = TestAppCtxInitializer.class) 1
class MyTest {
// 类体...
}
通过使用配置类和初始化器来指定配置。
@ExtendWith(SpringExtension::class)
// ApplicationContext 将从 TestConfig 加载
// 并由 TestAppCtxInitializer 初始化
@ContextConfiguration(
classes = [TestConfig::class],
initializers = [TestAppCtxInitializer::class]) 1
class MyTest {
// 类体...
}
通过使用配置类和初始化器来指定配置。
你也可以完全省略 @ContextConfiguration
中 XML 配置文件、Groovy 脚本或组件类的声明,而只声明 ApplicationContextInitializer
类,这些类负责在上下文中注册 bean —— 例如,通过编程方式从 XML 文件或配置类加载 bean 定义。以下示例展示了如何做到这一点:
- Java
- Kotlin
@ExtendWith(SpringExtension.class)
// ApplicationContext 将由 EntireAppInitializer 初始化
// 它可能在上下文中注册了 bean
@ContextConfiguration(initializers = EntireAppInitializer.class) 1
class MyTest {
// class body...
}
仅使用初始化器指定配置。
@ExtendWith(SpringExtension::class)
// ApplicationContext 将由 EntireAppInitializer 初始化
// 它可能在上下文中注册了 bean
@ContextConfiguration(initializers = [EntireAppInitializer::class]) 1
class MyTest {
// class body...
}
仅使用初始化器指定配置。