|
对于最新稳定版本,请使用 Spring Framework 7.0.6! |
使用上下文定制器进行配置
ContextCustomizer 负责在 bean 定义已加载到上下文中但上下文尚未刷新之前,对所提供的 ConfigurableApplicationContext 进行自定义。
ContextCustomizerFactory 负责创建一个 ContextCustomizer,其依据是某些自定义逻辑,用于判断针对某个测试类是否需要该 ContextCustomizer——例如,基于特定注解是否存在。这些工厂在 ContextLoaders 已经处理完测试类的上下文配置属性之后、但在创建 MergedContextConfiguration 之前被调用。
例如,Spring Framework 提供了以下默认注册的 ContextCustomizerFactory 实现:
MockServerContainerContextCustomizerFactory-
如果类路径中存在 WebSocket 支持,并且测试类或其某个外层类使用了
MockServerContainerContextCustomizer注解或元注解,则创建一个@WebAppConfiguration。MockServerContainerContextCustomizer会实例化一个新的MockServerContainer,并将其存储在ServletContext中,属性名为jakarta.websocket.server.ServerContainer。
注册中ContextCustomizerFactory实现
您可以使用 @ContextCustomizerFactories 注解,为测试类、其子类及其嵌套类显式注册 ContextCustomizerFactory 个实现。有关详细信息和示例,请参阅
注解支持
以及
@ContextCustomizerFactories
的 Javadoc。
自动发现默认配置ContextCustomizerFactory实现
通过使用 ContextCustomizerFactory 注册 @ContextCustomizerFactories 实现,适用于在有限的测试场景中使用的自定义工厂。然而,如果某个自定义工厂需要在整个测试套件中使用,这种方式可能会变得繁琐。此问题通过支持利用 ContextCustomizerFactory 机制自动发现默认的 SpringFactoriesLoader 实现得以解决。
例如,Spring Framework 和 Spring Boot 中构成测试支持的模块在其 ContextCustomizerFactory 属性文件中,均在 org.springframework.test.context.ContextCustomizerFactory 键下声明了所有核心默认的 META-INF/spring.factories 实现。可以在此处查看 spring-test 模块的 https://github.com/spring-projects/spring-framework/tree/main/spring-test/src/main/resources/META-INF/spring.factories 文件。
第三方框架和开发者也可以通过自己的 ContextCustomizerFactory 文件,以相同的方式向默认工厂列表中添加自己的 spring.factories 实现。
合并ContextCustomizerFactory实现
如果通过 ContextCustomizerFactory 注册了一个自定义的 @ContextCustomizerFactories,
它将与使用上述 自动发现机制 注册的默认工厂进行合并。
合并算法确保从列表中移除重复项,并在合并时将本地声明的工厂追加到默认工厂列表中。
|
要替换测试类、其子类及其嵌套类的默认工厂,可以将 |