Mixing XML, Groovy Scripts, and Component Classes

有时候可能需要混合使用 XML 配置文件、Groovy 脚本和组件类(通常为 @Configuration 类)来为您的测试配置 ApplicationContext。例如,如果您在生产中使用 XML 配置,您可能会决定您想使用 @Configuration 类为您的测试配置特定于 Spring 管理的组件,反之亦然。

此外,一些第三方框架(例如 Spring Boot)为同时从不同类型的资源中加载 ApplicationContext 提供了一流的支持(例如 XML 配置文件、Groovy 脚本和 @Configuration 类)。历史上,Spring Framework 并不支持标准部署的此功能。因此,Spring Framework 在 spring-test 模块中提供的 çoğu SmartContextLoader 实现只支持每个测试上下文的单个资源类型。但是,这并不意味着您不能同时使用两者。一般规则的一个例外是 GenericGroovyXmlContextLoaderGenericGroovyXmlWebContextLoader 同时支持 XML 配置文件和 Groovy 脚本。此外,第三方框架可以选择通过 @ContextConfiguration 支持声明 locationsclasses,并且通过 TestContext 框架中的标准测试支持,您拥有以下选项。

如果您想使用资源位置(例如 XML 或 Groovy)和 @Configuration 类来配置您的测试,您必须选择一个作为入口点,并且该入口点必须包含或导入另一个。例如,在 XML 或 Groovy 脚本中,您可以通过使用组件扫描或将其定义为普通 Spring bean 来包含 @Configuration 类,而在一个 @Configuration 类中,您可以使用 @ImportResource 来导入 XML 配置文件或 Groovy 脚本。请注意,此行为在语义上等同于您在生产中配置应用程序的方式:在生产配置中,您定义一组 XML 或 Groovy 资源位置或一组用于加载生产 ApplicationContext@Configuration 类,但您仍然有自由包含或导入其他类型的配置。