使用 Context Customizer 进行上下文配置
ContextCustomizer 负责在 bean 定义加载到上下文后但在上下文刷新之前定制所提供的 ConfigurableApplicationContext。
ContextCustomizerFactory 负责创建 ContextCustomizer,基于一些自定义逻辑来确定 ContextCustomizer 对于给定的测试类是否必要——例如,基于某个注解的存在。工厂在 ContextLoader 处理测试类的上下文配置属性之后,但在创建 MergedContextConfiguration 之前被调用。
例如,Spring Framework 提供了以下默认注册的 ContextCustomizerFactory 实现
MockServerContainerContextCustomizerFactory-
如果在 classpath 中存在 WebSocket 支持并且测试类或其任何封闭类被
@WebAppConfiguration注解或元注解,则创建一个MockServerContainerContextCustomizer。MockServerContainerContextCustomizer实例化一个新的MockServerContainer并将其存储在ServletContext中,属性名为jakarta.websocket.server.ServerContainer。
注册 ContextCustomizerFactory 实现
您可以使用 @ContextCustomizerFactories 注解为测试类、其子类及其嵌套类显式注册 ContextCustomizerFactory 实现。有关详细信息和示例,请参阅注解支持以及 @ContextCustomizerFactories 的 javadoc。
自动发现默认 ContextCustomizerFactory 实现
使用 @ContextCustomizerFactories 注册 ContextCustomizerFactory 实现适用于在有限测试场景中使用的自定义工厂。但是,如果自定义工厂需要在整个测试套件中使用,它可能会变得很麻烦。此问题通过支持通过 SpringFactoriesLoader 机制自动发现默认 ContextCustomizerFactory 实现来解决。
例如,构成 Spring Framework 和 Spring Boot 测试支持的模块在其 META-INF/spring.factories 属性文件中,在 org.springframework.test.context.ContextCustomizerFactory 键下声明所有核心默认 ContextCustomizerFactory 实现。spring-test 模块的 spring.factories 文件可以在此处查看。第三方框架和开发人员可以通过自己的 spring.factories 文件以相同的方式将自己的 ContextCustomizerFactory 实现贡献到默认工厂列表中。
合并 ContextCustomizerFactory 实现
如果通过 @ContextCustomizerFactories 注册了自定义 ContextCustomizerFactory,它将与使用上述自动发现机制注册的默认工厂合并。
合并算法确保从列表中删除重复项,并在合并时将本地声明的工厂附加到默认工厂列表的末尾。
|
要替换测试类、其子类及其嵌套类的默认工厂,您可以将 |