@ContextConfiguration

@ContextConfiguration 是一个可以应用于测试类的注解,用于配置元数据,这些元数据决定了如何为集成测试加载和配置 ApplicationContext。具体来说,@ContextConfiguration 声明了用于加载上下文的应用程序上下文资源 locations 或组件 classes

资源位置通常是位于类路径中的 XML 配置文件或 Groovy 脚本,而组件类通常是 @Configuration 类。然而,资源位置也可以指文件系统中的文件和脚本,组件类可以是 @Component 类、@Service 类等等。更多详情请参见 组件类

以下示例展示了一个引用 XML 文件的 @ContextConfiguration 注解:

Java
@ContextConfiguration("/test-config.xml") [id="CO1-1"][id="CO1-1"][id="CO1-1"](1)
class XmlApplicationContextTests {
	// class body...
}
<1>  引用一个 XML 文件。
Kotlin
@ContextConfiguration("/test-config.xml") [id="CO2-1"][id="CO1-2"][id="CO2-1"](1)
class XmlApplicationContextTests {
	// class body...
}
<1>  引用一个 XML 文件。

以下示例展示了一个引用类的 @ContextConfiguration 注解:

Java
@ContextConfiguration(classes = TestConfig.class) [id="CO3-1"][id="CO1-3"][id="CO3-1"](1)
class ConfigClassApplicationContextTests {
	// class body...
}
<1>  引用一个类。
Kotlin
@ContextConfiguration(classes = [TestConfig::class]) [id="CO4-1"][id="CO1-4"][id="CO4-1"](1)
class ConfigClassApplicationContextTests {
	// class body...
}
<1>  引用一个类。

作为声明资源位置或组件类的替代或补充,您可以使用 @ContextConfiguration 来声明 ApplicationContextInitializer 类。以下示例展示了这种情况:

Java
@ContextConfiguration(initializers = CustomContextInitializer.class) [id="CO5-1"][id="CO1-5"][id="CO5-1"](1)
class ContextInitializerTests {
	// class body...
}
<1>  声明一个初始化器类。
Kotlin
@ContextConfiguration(initializers = [CustomContextInitializer::class]) [id="CO6-1"][id="CO1-6"][id="CO6-1"](1)
class ContextInitializerTests {
	// class body...
}
<1>  声明一个初始化器类。

您还可以选择使用 @ContextConfiguration 来声明 ContextLoader 策略。但是请注意,您通常不需要显式配置加载器,因为默认加载器支持 initializers 和资源 locations 或组件 classes

以下示例同时使用了位置和加载器:

Java
@ContextConfiguration(locations = "/test-context.xml", loader = CustomContextLoader.class) [id="CO7-1"][id="CO1-7"][id="CO7-1"](1)
class CustomLoaderXmlApplicationContextTests {
	// class body...
}
<1>  同时配置位置和自定义加载器。
Kotlin
@ContextConfiguration("/test-context.xml", loader = CustomContextLoader::class) [id="CO8-1"][id="CO1-8"][id="CO8-1"](1)
class CustomLoaderXmlApplicationContextTests {
	// class body...
}
<1>  同时配置位置和自定义加载器。

@ContextConfiguration 支持继承由超类或封闭类声明的资源位置或配置类以及上下文初始化器。

更多详情请参见 上下文管理@Nested 测试类配置@ContextConfiguration Javadoc。