Context Configuration with Component Classes

如需通过使用组件类(请参阅 Java-based container configuration)加载 `ApplicationContext`用于您的测试,您可以使用 `@ContextConfiguration`注释您的测试类,并使用包含组件类引用的数组配置 `classes`属性。以下示例展示了如何执行此操作:

Java
@ExtendWith(SpringExtension.class)
// ApplicationContext will be loaded from AppConfig and TestConfig
@ContextConfiguration(classes = {AppConfig.class, TestConfig.class}) (1)
class MyTest {
	// class body...
}
1 Specifying component classes.
Kotlin
@ExtendWith(SpringExtension::class)
// ApplicationContext will be loaded from AppConfig and TestConfig
@ContextConfiguration(classes = [AppConfig::class, TestConfig::class]) (1)
class MyTest {
	// class body...
}
2 Specifying component classes.
Component Classes

术语“组件类”可以指以下任一项:

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

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

  • 一个符合 JSR-330 规范的类,带有 jakarta.inject 类型的注解。

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

  • 任何其他准备注册为一个 Spring 组件的类(也就是在 ApplicationContext 中是一个 Spring Bean),可能利用自动连接一个构造器,而不使用 Spring 注解。

有关组件类的配置和语义的更多信息,请参阅 javadoc @Configurationjavadoc @Bean,特别关注 @Bean 精简模式的讨论。

如果您从 @ContextConfiguration`注释中省略 `classes`属性,TestContext 框架将尝试检测默认配置类的存在。具体来说,`AnnotationConfigContextLoader`和 `AnnotationConfigWebContextLoader`检测符合配置类实现要求(如 javadoc `@Configuration 中指定)的测试类的所有 static`嵌套类。请注意,配置类的名称是任意的。此外,测试类可以包含多个 `static`嵌套配置类(如果需要)。在以下示例中,`OrderServiceTest`类声明了一个命名的 `Config`嵌套配置类 `static,该配置类自动用于为测试类加载 ApplicationContext

Java
@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 类中加载配置信息。
Kotlin
@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
	}
}
2 从嵌套的 Config 类中加载配置信息。