Context Configuration with Groovy Scripts

使用基于Groovy Bean Definition DSL的Groovy脚本载入`ApplicationContext`测试时,可以通过`@ContextConfiguration`注解测试类并在`locations`或`value`属性中配置一个包含Groovy脚本资源位置的数组。Groovy脚本的资源查找语义与XML configuration files所述的相同。

Enabling Groovy script support

如果 Groovy 在类加载路径上,则自动启用使用 Groovy 脚本加载 ApplicationContext 的支持。

以下示例显示如何指定 Groovy 配置文件:

Java
@ExtendWith(SpringExtension.class)
// ApplicationContext will be loaded from "/AppConfig.groovy" and
// "/TestConfig.groovy" in the root of the classpath
@ContextConfiguration({"/AppConfig.groovy", "/TestConfig.Groovy"}) 1
class MyTest {
	// class body...
}
1 指定 Groovy 配置文件的位置。
Kotlin
@ExtendWith(SpringExtension::class)
// ApplicationContext will be loaded from "/AppConfig.groovy" and
// "/TestConfig.groovy" in the root of the classpath
@ContextConfiguration("/AppConfig.groovy", "/TestConfig.Groovy") (1)
class MyTest {
	// class body...
}
2 指定 Groovy 配置文件的位置。

如果您从 @ContextConfiguration 标注中省略 locationsvalue 属性,TestContext 框架将尝试检测一个默认 Groovy 脚本。具体来说,GenericGroovyXmlContextLoaderGenericGroovyXmlWebContextLoader 根据测试类的名称检测一个默认位置。如果您的类被命名为 com.example.MyTest,则 Groovy 上下文加载器将从 "classpath:com/example/MyTestContext.groovy" 加载您的应用程序上下文。以下示例显示如何使用默认值:

Java
@ExtendWith(SpringExtension.class)
// ApplicationContext will be loaded from
// "classpath:com/example/MyTestContext.groovy"
@ContextConfiguration (1)
class MyTest {
	// class body...
}
1 从默认位置加载配置。
Kotlin
@ExtendWith(SpringExtension::class)
// ApplicationContext will be loaded from
// "classpath:com/example/MyTestContext.groovy"
@ContextConfiguration (1)
class MyTest {
	// class body...
}
2 从默认位置加载配置。
Declaring XML configuration and Groovy scripts simultaneously

您可以通过使用 @ContextConfigurationlocationsvalue 属性同时声明 XML 配置文件和 Groovy 脚本。如果已配置资源位置的路径以 .xml 结尾,则使用 XmlBeanDefinitionReader 加载它。否则,使用 GroovyBeanDefinitionReader 加载它。 以下清单展示如何在集成测试中结合二者:

Java
@ExtendWith(SpringExtension.class)
// ApplicationContext will be loaded from
// "/app-config.xml" and "/TestConfig.groovy"
@ContextConfiguration({ "/app-config.xml", "/TestConfig.groovy" })
class MyTest {
	// class body...
}
Kotlin
@ExtendWith(SpringExtension::class)
// ApplicationContext will be loaded from
// "/app-config.xml" and "/TestConfig.groovy"
@ContextConfiguration("/app-config.xml", "/TestConfig.groovy")
class MyTest {
	// class body...
}