|
此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Framework 6.2.10! |
测试中的 Bean 覆盖
测试中的 Bean 覆盖是指在ApplicationContext对于测试类,通过注释测试类或一个或多个
非静态字段。
此功能旨在作为注册实践的风险较低的替代方案
A 豆过孔@Bean使用DefaultListableBeanFactory
setAllowBeanDefinitionOverridingflag 设置为true. |
Spring TestContext框架提供了两组用于bean重写的注释。
前者纯粹依赖于 Spring,而后者则依赖于 Mockito 第三方库。
自定义 Bean 覆盖支持
上面提到的三个注释建立在@BeanOverridemeta-annotation 和
关联的基础架构,允许定义自定义 Bean 覆盖变体。
要实现自定义 Bean 覆盖支持,需要满足以下条件:
-
元注释
@BeanOverride定义BeanOverrideProcessor使用 -
一个定制
BeanOverrideProcessor实现 -
一个或多个混凝土
BeanOverrideHandler处理器创建的实现
Spring TestContext 框架包括以下 API 的实现,这些 API 支持 bean 覆盖,并负责设置其余的基础设施。
-
一个
BeanFactoryPostProcessor -
一个
ContextCustomizerFactory -
一个
TestExecutionListener
这spring-test模块寄存器后两者的实现
(BeanOverrideContextCustomizerFactory和BeanOverrideTestExecutionListener) 在其META-INF/spring.factories属性文件.
覆盖基础架构的 bean 搜索测试类的注释以及
测试类中非静态字段的注释,这些字段被元注释@BeanOverride并实例化相应的BeanOverrideProcessor这是
负责创建适当的BeanOverrideHandler.
内部BeanOverrideBeanFactoryPostProcessor然后使用 bean 覆盖处理程序来
更改测试的ApplicationContext通过创建、替换或包装 bean 作为
由相应的BeanOverrideStrategy:
REPLACE-
替换 bean。如果相应的 bean 不存在,则抛出异常。
REPLACE_OR_CREATE-
替换 bean(如果存在)。如果相应的 Bean 没有创建新 Bean 存在。
WRAP-
检索原始 bean 并将其包装。
|
只能覆盖单例 Bean。任何重写非单例 Bean 的尝试 将导致异常。 替换由 当包装由 |
|
与 Spring 的自动布线机制(例如,分辨率 通常,bean 由
|