使用组件类进行上下文配置
要使用组件类为测试加载 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 类加载配置信息。 |