使用上下文初始化器進行上下文配置
要使用上下文初始化器配置測試的 ApplicationContext
,請使用 @ContextConfiguration
註解測試類,並將 initializers
屬性配置為一個數組,該陣列包含實現了 ApplicationContextInitializer
的類的引用。然後,宣告的上下文初始化器用於初始化為測試載入的 ConfigurableApplicationContext
。請注意,每個宣告的初始化器支援的具體 ConfigurableApplicationContext
型別必須與所使用的 SmartContextLoader
建立的 ApplicationContext
型別相容(通常是 GenericApplicationContext
)。此外,初始化器的呼叫順序取決於它們是否實現了 Spring 的 Ordered
介面,或者是否使用了 Spring 的 @Order
註解或標準的 @Priority
註解。以下示例展示瞭如何使用初始化器:
-
Java
-
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...
}
1 | 使用配置類和初始化器指定配置。 |
@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 | 使用配置類和初始化器指定配置。 |
您也可以完全省略 @ContextConfiguration
中 XML 配置檔案、Groovy 指令碼或元件類的宣告,而只宣告 ApplicationContextInitializer
類,由它們負責在上下文中註冊 bean,例如透過以程式設計方式從 XML 檔案或配置類載入 bean 定義。以下示例展示瞭如何做到這一點:
-
Java
-
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...
}
1 | 僅使用初始化器指定配置。 |
@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 | 僅使用初始化器指定配置。 |