@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 的属性,以微调模拟细节。
默认情况下,@MockitoBeanannotation 使用REPLACE_OR_CREATE
测试 Bean 覆盖策略。
如果没有现有的 Bean 匹配,则会动态创建一个新的 Bean。如前所述,
您可以切换到REPLACE策略,方法是将enforceOverride属性设置为true.
这@MockitoSpyBeanannotation 使用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被考虑。否则,测试
将失败,并且您需要提供某种限定符来识别哪个CustomServicebean 的 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被考虑。否则
测试将失败,您需要提供某种限定符来识别
哪个CustomServicebean 的 bean 进行监视。
以下示例使用 by-name 查找,而不是 by-type 查找:
-
Java
class OverrideBeanTests {
@MockitoSpyBean("service") (1)
private CustomService customService;
// test case body...
}
| 1 | 包装名为service带 Mockitospy. |