使用 Groovy 脚本进行上下文配置

要使用包含Groovy Bean 定义 DSL的 Groovy 脚本为您的测试加载ApplicationContext,您可以使用@ContextConfiguration注解您的测试类,并使用包含 Groovy 脚本资源位置的数组配置locationsvalue属性。Groovy 脚本的资源查找语义与XML 配置文件中描述的相同。

启用 Groovy 脚本支持
如果 Groovy 位于类路径中,则会自动启用在 Spring TestContext 框架中使用 Groovy 脚本加载ApplicationContext的支持。

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

  • Java

  • 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...
}
1 指定 Groovy 配置文件的位置。
@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 配置文件的位置。

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

  • Java

  • Kotlin

@ExtendWith(SpringExtension.class)
// ApplicationContext will be loaded from
// "classpath:com/example/MyTestContext.groovy"
@ContextConfiguration (1)
class MyTest {
	// class body...
}
1 从默认位置加载配置。
@ExtendWith(SpringExtension::class)
// ApplicationContext will be loaded from
// "classpath:com/example/MyTestContext.groovy"
@ContextConfiguration (1)
class MyTest {
	// class body...
}
1 从默认位置加载配置。
同时声明 XML 配置和 Groovy 脚本

您可以使用@ContextConfigurationlocationsvalue属性同时声明 XML 配置文件和 Groovy 脚本。如果配置的资源位置的路径以.xml结尾,则使用XmlBeanDefinitionReader加载它。否则,将使用GroovyBeanDefinitionReader加载它。

以下列表显示了如何在集成测试中组合两者

  • Java

  • 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...
}
@ExtendWith(SpringExtension::class)
// ApplicationContext will be loaded from
// "/app-config.xml" and "/TestConfig.groovy"
@ContextConfiguration("/app-config.xml", "/TestConfig.groovy")
class MyTest {
	// class body...
}