使用组件类进行上下文配置

通过使用组件类(参见基于Java的容器配置)为测试加载ApplicationContext,您可以在测试类上使用@ContextConfiguration注解,并配置classes属性为包含对组件类引用的数组。以下示例展示了如何实现:

  • Java

  • Kotlin

@ExtendWith(SpringExtension.class)
// ApplicationContext将从AppConfig和TestConfig加载
@ContextConfiguration(classes = {AppConfig.class, TestConfig.class}) (1)
class MyTest {
	// 类主体...
}
1 指定组件类。
@ExtendWith(SpringExtension::class)
// ApplicationContext将从AppConfig和TestConfig加载
@ContextConfiguration(classes = [AppConfig::class, TestConfig::class]) (1)
class MyTest {
	// 类主体...
}
1 指定组件类。
组件类

术语“组件类”可以指以下任何内容:

  • 一个带有@Configuration注解的类。

  • 一个组件(即,带有@Component@Service@Repository或其他构造型注解的类)。

  • 一个使用jakarta.inject注解进行标注的符合JSR-330标准的类。

  • 任何包含@Bean方法的类。

  • 任何其他打算注册为Spring组件(即,在ApplicationContext中作为Spring bean注册)的类,可能利用单个构造函数的自动装配而无需使用Spring注解。

查看@Configuration@Bean的javadoc,以获取有关组件类配置和语义的进一步信息,特别注意@Bean Lite模式的讨论。

如果从@ContextConfiguration注解中省略classes属性,则TestContext框架会尝试检测默认配置类的存在。具体来说,AnnotationConfigContextLoaderAnnotationConfigWebContextLoader会检测满足@Configuration javadoc中配置类实现要求的测试类的所有static嵌套类。请注意,配置类的名称是任意的。此外,如果需要,测试类可以包含多个static嵌套配置类。在以下示例中,OrderServiceTest类声明了一个名为Configstatic嵌套配置类,该类会自动用于加载测试类的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
	}

}
1 从嵌套的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
	}
}
1 从嵌套的Config类加载配置信息。