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