使用组件类进行上下文配置
要使用组件类来加载测试所需的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...
}
指定组件类。
@ExtendWith(SpringExtension::class)
// ApplicationContext will be loaded from AppConfig and TestConfig
@ContextConfiguration(classes = [AppConfig::class, TestConfig::class]) 1
class MyTest {
// class body...
}
指定组件类。
组件类
“组件类”一词可以指以下任何一种:
-
被
@Configuration注解的类。 -
组件(即被
@Component、@Service、@Repository或其他类型注解注解的类)。 -
遵循JSR-330标准的类,并且带有
jakartaInject注解。 -
包含
@Bean方法的任何类。 -
任何其他旨在作为Spring组件注册的类(即在
ApplicationContext中的Spring bean),可能利用不使用Spring注解的单一构造函数的自动装配功能。
有关组件类的配置和语义的更多信息,请参阅@Configuration和@Bean的Javadoc文档,特别注意对@Bean Lite模式的讨论。
如果从@ContextConfiguration注解中省略classes属性,TestContext框架会尝试检测是否存在默认配置类。具体来说,AnnotationConfigContextLoader和AnnotationConfigWebContextLoader会检测测试类中所有符合配置类实现要求的static嵌套类,这些要求在@Configuration的javadoc中有明确规定。需要注意的是,配置类的名称是任意的。此外,如果需要,一个测试类可以包含多个static嵌套配置类。在下面的例子中,OrderServiceTest类声明了一个名为Config的static嵌套配置类,该配置类会自动用于为测试类加载ApplicationContext:
- Java
- Kotlin
@SpringJUnitConfig 1
// ApplicationContext 将从嵌套的 Config 类中加载
class OrderServiceTest {
@Configuration
static class Config {
// 该 Bean 将被注入到 OrderServiceTest 类中
@Bean
OrderService orderService() {
OrderService orderService = new OrderServiceImpl();
// 设置属性等
return orderService;
}
}
@Autowired
OrderService orderService;
@Test
void testOrderService() {
// 测试 orderService
}
}
从嵌套的
Config类中加载配置信息。
@SpringJUnitConfig 1
// ApplicationContext 将从嵌套的 Config 类中加载
class OrderServiceTest {
@Autowired
lateinit var orderService: OrderService
@Configuration
class Config {
// 该 Bean 将被注入到 OrderServiceTest 类中
@Bean
fun orderService(): OrderService {
// 设置属性等
return OrderServiceImpl()
}
}
@Test
_fun testOrderService() {
// 测试 orderService
}
}
从嵌套的
Config类中加载配置信息。