混合使用 XML、Groovy 脚本和组件类
有时可能需要混合使用 XML 配置文件、Groovy 脚本和组件类(通常是 @Configuration
类)来配置测试的 ApplicationContext
。例如,如果您在生产中使用 XML 配置,您可能决定使用 @Configuration
类来配置测试的特定 Spring 管理组件,反之亦然。
此外,一些第三方框架(例如 Spring Boot)提供了一流的支持,可以从不同类型的资源中同时加载 ApplicationContext
(例如,XML 配置文件、Groovy 脚本和 @Configuration
类)。从历史上看,Spring 框架在标准部署中不支持此功能。因此,Spring 框架在 spring-test
模块中提供的多数 SmartContextLoader
实现只支持每个测试上下文的一种资源类型。但是,这并不意味着您不能同时使用两者。一个例外是 GenericGroovyXmlContextLoader
和 GenericGroovyXmlWebContextLoader
同时支持 XML 配置文件和 Groovy 脚本。此外,第三方框架可以选择通过 @ContextConfiguration
支持声明 locations
和 classes
,并且,使用 TestContext 框架中的标准测试支持,您有以下选择。
如果您想使用资源位置(例如,XML 或 Groovy)和 @Configuration
类来配置您的测试,您必须选择其中一个作为入口点,并且该入口点必须包含或导入另一个。例如,在 XML 或 Groovy 脚本中,您可以通过使用组件扫描或将它们定义为普通的 Spring bean 来包含 @Configuration
类,而在 @Configuration
类中,您可以使用 @ImportResource
来导入 XML 配置文件或 Groovy 脚本。请注意,此行为在语义上等同于您在生产中配置应用程序的方式:在生产配置中,您定义一组 XML 或 Groovy 资源位置或一组 @Configuration
类,从这些位置或类加载您的生产 ApplicationContext
,但您仍然可以自由地包含或导入其他类型的配置。