@MockitoBean@MockitoSpyBean

@MockitoBean@MockitoSpyBean用于测试类中的字段以覆盖 bean 在测试的ApplicationContext分别替换为 Mockito mockspy。在 后一种情况,则 Spy 捕获并包装原始 Bean 的早期实例。spring-doc.cadn.net.cn

默认情况下,带注释的字段的类型用于搜索要覆盖的候选 bean。 如果多个候选项匹配,则@Qualifier可以将候选者缩小到 覆盖。或者,bean 名称与字段名称匹配的候选者将 火柴。spring-doc.cadn.net.cn

使用@MockitoBean,如果相应的 bean 没有 存在。但是,如果您希望测试失败,而相应的 bean 没有 存在,则可以设置enforceOverride属性设置为true–例如@MockitoBean(enforceOverride = true).spring-doc.cadn.net.cn

要使用 by-name 覆盖而不是 by-type 覆盖,请指定name属性 的注释。spring-doc.cadn.net.cn

限定符(包括字段的名称)用于确定单独的ApplicationContext需要创建。如果您使用此功能进行 mock 或 spy 同一个 bean,请确保一致地命名字段以避免 创建不必要的上下文。spring-doc.cadn.net.cn

每个注解还定义了特定于 Mockito 的属性,以微调模拟细节。spring-doc.cadn.net.cn

默认情况下,@MockitoBeanannotation 使用REPLACE_OR_CREATE 测试 Bean 覆盖策略。 如果没有现有的 Bean 匹配,则会动态创建一个新的 Bean。如前所述, 您可以切换到REPLACE策略,方法是将enforceOverride属性设置为true.spring-doc.cadn.net.cn

@MockitoSpyBeanannotation 使用WRAP 策略, 原始实例包装在 Mockito 间谍中。此策略要求 只存在一个候选 bean。spring-doc.cadn.net.cn

只能覆盖单例 bean。任何覆盖非单例 bean 的尝试 将导致异常。spring-doc.cadn.net.cn

使用@MockitoBean要模拟由FactoryBeanFactoryBean将替换为由FactoryBean.spring-doc.cadn.net.cn

使用@MockitoSpyBean要为FactoryBean,将创建一个 Spy 对于由FactoryBean,而不是FactoryBean本身。spring-doc.cadn.net.cn

以下示例演示如何使用@MockitoBean注解:spring-doc.cadn.net.cn

class OverrideBeanTests {
	@MockitoBean (1)
	private CustomService customService;

	// test case body...
}
1 将 bean 替换为类型CustomService带 Mockitomock.

在上面的示例中,我们正在为CustomService.如果有多个 bean 的 Bean 中,名为customService被考虑。否则,测试 将失败,并且您需要提供某种限定符来识别哪个CustomServicebean 的 bean 中。如果不存在这样的 bean,则 bean 定义 将使用自动生成的 bean 名称创建。spring-doc.cadn.net.cn

以下示例使用 by-name 查找,而不是 by-type 查找:spring-doc.cadn.net.cn

class OverrideBeanTests {
	@MockitoBean("service") (1)
	private CustomService customService;

	// test case body...

}
1 将名为service带 Mockitomock.

如果没有名为service存在,则创建一个。spring-doc.cadn.net.cn

以下示例演示如何使用@MockitoSpyBean注解:spring-doc.cadn.net.cn

class OverrideBeanTests {
	@MockitoSpyBean (1)
	private CustomService customService;

	// test case body...
}
1 用 type 包装 beanCustomService带 Mockitospy.

在上面的示例中,我们使用 typeCustomService.如果超过 存在一个该类型的 bean,则名为customService被考虑。否则 测试将失败,您需要提供某种限定符来识别 哪个CustomServicebean 的 bean 进行监视。spring-doc.cadn.net.cn

以下示例使用 by-name 查找,而不是 by-type 查找:spring-doc.cadn.net.cn

class OverrideBeanTests {
	@MockitoSpyBean("service") (1)
	private CustomService customService;

	// test case body...

}
1 包装名为service带 Mockitospy.