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