@MockitoBean
和@MockitoSpyBean
@MockitoBean
和@MockitoSpyBean
用于测试类中的字段以覆盖 bean
在测试的ApplicationContext
分别替换为 Mockito mock 或 spy。在
后一种情况,则 Spy 捕获并包装原始 Bean 的早期实例。
默认情况下,带注释的字段的类型用于搜索要覆盖的候选 bean。
如果多个候选项匹配,则@Qualifier
可以将候选者缩小到
覆盖。或者,bean 名称与字段名称匹配的候选者将
火柴。
使用@MockitoBean
,如果相应的 bean 没有
存在。但是,如果您希望测试失败,而相应的 bean 没有
存在,则可以设置enforceOverride
属性设置为true
–例如@MockitoBean(enforceOverride = true)
.
要使用 by-name 覆盖而不是 by-type 覆盖,请指定name
属性
的注释。
限定符(包括字段的名称)用于确定单独的 |
每个注解还定义了特定于 Mockito 的属性,以微调模拟细节。
默认情况下,@MockitoBean
annotation 使用REPLACE_OR_CREATE
测试 Bean 覆盖策略。
如果没有现有的 Bean 匹配,则会动态创建一个新的 Bean。如前所述,
您可以切换到REPLACE
策略,方法是将enforceOverride
属性设置为true
.
这@MockitoSpyBean
annotation 使用WRAP
策略,
原始实例包装在 Mockito 间谍中。此策略要求
只存在一个候选 bean。
只能覆盖单例 bean。任何覆盖非单例 bean 的尝试 将导致异常。 使用 使用 |
以下示例演示如何使用@MockitoBean
注解:
-
Java
class OverrideBeanTests {
@MockitoBean (1)
private CustomService customService;
// test case body...
}
1 | 将 bean 替换为类型CustomService 带 Mockitomock . |
在上面的示例中,我们正在为CustomService
.如果有多个 bean
的 Bean 中,名为customService
被考虑。否则,测试
将失败,并且您需要提供某种限定符来识别哪个CustomService
bean 的 bean 中。如果不存在这样的 bean,则 bean 定义
将使用自动生成的 bean 名称创建。
以下示例使用 by-name 查找,而不是 by-type 查找:
-
Java
class OverrideBeanTests {
@MockitoBean("service") (1)
private CustomService customService;
// test case body...
}
1 | 将名为service 带 Mockitomock . |
如果没有名为service
存在,则创建一个。
以下示例演示如何使用@MockitoSpyBean
注解:
-
Java
class OverrideBeanTests {
@MockitoSpyBean (1)
private CustomService customService;
// test case body...
}
1 | 用 type 包装 beanCustomService 带 Mockitospy . |
在上面的示例中,我们使用 typeCustomService
.如果超过
存在一个该类型的 bean,则名为customService
被考虑。否则
测试将失败,您需要提供某种限定符来识别
哪个CustomService
bean 的 bean 进行监视。
以下示例使用 by-name 查找,而不是 by-type 查找:
-
Java
class OverrideBeanTests {
@MockitoSpyBean("service") (1)
private CustomService customService;
// test case body...
}
1 | 包装名为service 带 Mockitospy . |