使用上下文定制器进行配置
ContextCustomizer
负责在将bean定义加载到上下文中后但在刷新上下文之前对提供的ConfigurableApplicationContext
进行定制。
ContextCustomizerFactory
负责根据某些自定义逻辑创建一个ContextCustomizer
,该逻辑确定对于给定的测试类是否需要ContextCustomizer
,例如,基于某个注解的存在。工厂在ContextLoaders
处理测试类的上下文配置属性后但在创建MergedContextConfiguration
之前被调用。
例如,Spring Framework提供了以下默认注册的ContextCustomizerFactory
实现:
-
MockServerContainerContextCustomizerFactory
-
如果类路径中存在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
属性文件中声明了所有核心默认的ContextCustomizerFactory
实现,这些实现位于org.springframework.test.context.ContextCustomizerFactory
键下。 spring-test
模块的spring.factories
文件可以在这里查看。第三方框架和开发人员可以通过自己的spring.factories
文件以相同的方式向默认工厂列表中贡献自己的ContextCustomizerFactory
实现。
合并ContextCustomizerFactory
实现
如果通过@ContextCustomizerFactories
注册了自定义ContextCustomizerFactory
,它将与使用前述自动发现机制注册的默认工厂进行合并。
合并算法确保从列表中删除重复项,并在合并时将本地声明的工厂附加到默认工厂列表中。
要替换测试类、其子类和嵌套类的默认工厂,可以将 |