使用元件類進行上下文配置
要使用元件類為測試載入 ApplicationContext
(參見基於 Java 的容器配置),你可以使用 @ContextConfiguration
註解測試類,並透過一個包含元件類引用的陣列配置其 classes
屬性。以下示例展示瞭如何實現:
-
Java
-
Kotlin
@ExtendWith(SpringExtension.class)
// ApplicationContext will be loaded from AppConfig and TestConfig
@ContextConfiguration(classes = {AppConfig.class, TestConfig.class}) (1)
class MyTest {
// class body...
}
1 | 指定元件類。 |
@ExtendWith(SpringExtension::class)
// ApplicationContext will be loaded from AppConfig and TestConfig
@ContextConfiguration(classes = [AppConfig::class, TestConfig::class]) (1)
class MyTest {
// class body...
}
1 | 指定元件類。 |
元件類
“元件類”一詞可以指代以下任何一種:
有關元件類的配置和語義的更多資訊,請參見 |
如果省略 @ContextConfiguration
註解中的 classes
屬性,TestContext 框架會嘗試檢測預設配置類的存在。具體來說,AnnotationConfigContextLoader
和 AnnotationConfigWebContextLoader
會檢測測試類的所有 static
巢狀類,這些巢狀類符合 @Configuration
javadoc 中指定的配置類實現要求。請注意,配置類的名稱是任意的。此外,如果需要,一個測試類可以包含多個 static
巢狀配置類。在以下示例中,OrderServiceTest
類聲明瞭一個名為 Config
的 static
巢狀配置類,該類會自動用於為測試類載入 ApplicationContext
:
-
Java
-
Kotlin
@SpringJUnitConfig (1)
// ApplicationContext will be loaded from the static nested Config class
class OrderServiceTest {
@Configuration
static class Config {
// this bean will be injected into the OrderServiceTest class
@Bean
OrderService orderService() {
OrderService orderService = new OrderServiceImpl();
// set properties, etc.
return orderService;
}
}
@Autowired
OrderService orderService;
@Test
void testOrderService() {
// test the orderService
}
}
1 | 從巢狀的 Config 類載入配置資訊。 |
@SpringJUnitConfig (1)
// ApplicationContext will be loaded from the nested Config class
class OrderServiceTest {
@Autowired
lateinit var orderService: OrderService
@Configuration
class Config {
// this bean will be injected into the OrderServiceTest class
@Bean
fun orderService(): OrderService {
// set properties, etc.
return OrderServiceImpl()
}
}
@Test
fun testOrderService() {
// test the orderService
}
}
1 | 從巢狀的 Config 類載入配置資訊。 |