默认上下文配置
正如在组件类、
XML 资源和
Groovy 脚本相关章节中所解释的,
如果你没有显式指定用于加载测试 @Configuration 的 ApplicationContext 类、
XML 配置文件或 Groovy 脚本,TestContext 框架将尝试定位默认的上下文配置。
然而,由于检测算法中存在一个 bug,如果类型层次结构或外围类层次结构(针对 @Nested 测试类)未声明 @ContextConfiguration,则当前会忽略超类或外围类的默认上下文配置。
从 Spring Framework 7.1 开始,在上述场景中,TestContext 框架将能够可靠地检测到给定测试类之上的类型层次结构或外部类层次结构中的所有默认上下文配置。因此,升级到 7.1 后,测试套件可能会遇到问题。例如,如果由于前述 bug 而忽略了超类或外部类中的静态嵌套 @Configuration 类,那么在 7.1 版本修复该 bug 后,该 @Configuration 类将不再被忽略,这可能导致生成的 ApplicationContext 中出现意外的 bean,甚至直接导致测试失败。
在此期间,TestContext 框架在遇到当前被忽略的默认上下文配置时会记录一条警告信息——例如,一个 @Configuration 类或 XML 配置文件。本节其余部分将指导您如何处理测试套件中出现的此类警告。
|
通过在受影响的子类或 |
如果你不希望静态嵌套的 @Configuration 类被处理,你可以:
-
移除
@Configuration声明。 -
仅在你确实希望处理此类的地方应用
@ContextConfiguration。 -
将静态嵌套的
@Configuration类移至独立的顶层类,以避免它们被意外地解释为默认配置类。
同样地,如果你遇到默认的 XML 配置文件或 Groovy 脚本被检测到的问题,并且不希望它们被处理,你可以:
-
仅在你确实希望处理此类资源的地方应用
@ContextConfiguration。 -
将资源文件重命名为不符合默认命名约定的名称(例如,对于 XML 配置文件使用
*-context.xml以外的名称),以防止它们被意外地解释为默认配置文件。 -
将受影响的资源文件移动到项目中的不同包或文件系统位置。