此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Framework 6.2.0spring-doc.cadn.net.cn

@MockitoBean@MockitoSpyBean

@MockitoBean@MockitoSpyBean用于测试类中的非静态字段,以 覆盖测试的ApplicationContext与 Mockito 模拟间谍, 分别。在后一种情况下,将捕获原始 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@MockitoSpyBean领域。spring-doc.cadn.net.cn

因此,此类字段可以是public,protected、package-private(默认可见性)、 或private取决于项目的需要或编码实践。spring-doc.cadn.net.cn

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

class OverrideBeanTests {
	@MockitoBean (1)
	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)
	CustomService customService;

	// test case body...

}
1 将名为service带 Mockitomock.

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

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

class OverrideBeanTests {
	@MockitoSpyBean (1)
	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)
	CustomService customService;

	// test case body...

}
1 包装名为service带 Mockitospy.