使用上下文初始化器配置上下文
通过使用上下文初始化器为测试配置ApplicationContext
,请在测试类上注释@ContextConfiguration
,并使用包含实现ApplicationContextInitializer
的类引用的数组配置initializers
属性。然后,声明的上下文初始化器将用于初始化为测试加载的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 {
// 类主体...
}
1 | 通过使用配置类和初始化器指定配置。 |
@ExtendWith(SpringExtension::class)
// ApplicationContext将从TestConfig加载
// 并由TestAppCtxInitializer初始化
@ContextConfiguration(
classes = [TestConfig::class],
initializers = [TestAppCtxInitializer::class]) (1)
class MyTest {
// 类主体...
}
1 | 通过使用配置类和初始化器指定配置。 |
您还可以完全省略在@ContextConfiguration
中声明XML配置文件、Groovy脚本或组件类,并仅声明ApplicationContextInitializer
类,这些类负责在上下文中注册bean,例如,通过从XML文件或配置类中以编程方式加载bean定义。以下示例显示了如何操作:
-
Java
-
Kotlin
@ExtendWith(SpringExtension.class)
// ApplicationContext将由EntireAppInitializer初始化
// 其中可能在上下文中注册bean
@ContextConfiguration(initializers = EntireAppInitializer.class) (1)
class MyTest {
// 类主体...
}
1 | 仅使用初始化器指定配置。 |
@ExtendWith(SpringExtension::class)
// ApplicationContext将由EntireAppInitializer初始化
// 其中可能在上下文中注册bean
@ContextConfiguration(initializers = [EntireAppInitializer::class]) (1)
class MyTest {
// 类主体...
}
1 | 仅使用初始化器指定配置。 |