【SpringBoot单元测试@MockBean和@SpyBean的使用】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

在单元测试中,如果在微服务环境下需要其他服务模块支持但其他模块目前又无法提供支持的情况下。可以使用@MockBean注解和@SpyBean注解模拟服务返回数据支持测试。


@MockBean

使用@MockBean修饰的Service返回值默认为null,不会调用真实的方法。
在这里插入图片描述
如果不想使用默认值可以指定返回值。
在这里插入图片描述
但是如果接口可以使用的话使用如上方法就没法获得接口正确的返回值了。因此可以用下面这个注解。

@SpyBean

没有标明默认值的时候默认调用真实的方法,否则调用默认值。
在这里插入图片描述
表明默认值后返回默认值
在这里插入图片描述

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`@Mock` 和 `@MockBean` 是在不同的上下文中使用的注解,用于模拟对象的创建和注入。它们的区别如下: 1. `@Mock` 注解: - `@Mock` 注解是 Mockito 框架提供的注解,用于创建一个模拟对象(mock object)。 - 它通常在测试类中使用,用于模拟被测试类所依赖的对象。 - `@Mock` 注解会创建一个虚拟的对象,该对象可以模拟被注入的对象的行为,并且可以通过 Mockito 提供的 API 进行行为验证和调用预期的方法。 下面是一个示例: ```java public class ExampleService { private ExampleRepository repository; public ExampleService(ExampleRepository repository) { this.repository = repository; } public String getData() { return repository.getData(); } } // 测试类 @RunWith(MockitoJUnitRunner.class) public class ExampleServiceTest { @Mock private ExampleRepository repository; @InjectMocks private ExampleService service; @Test public void testGetData() { // 设置模拟对象的行为 when(repository.getData()).thenReturn("Mocked Data"); // 调用被测试方法 String result = service.getData(); // 验证方法调用和结果 verify(repository).getData(); assertEquals("Mocked Data", result); } } ``` 在上述示例中,`@Mock` 注解用于创建一个模拟的 `ExampleRepository` 对象,该对象在进行测试时会被注入到 `ExampleService` 中。通过 `when()` 方法设置了模拟对象的行为,并在测试方法中验证了方法的调用和结果。 2. `@MockBean` 注解: - `@MockBean` 注解是 Spring Boot 提供的注解,用于创建一个模拟的 Spring Bean 对象。 - 它通常在集成测试或 Spring Boot单元测试使用,用于模拟应用程序上下文中的 Bean 对象。 - `@MockBean` 注解会创建一个模拟的 Bean 对象,并将其注入到应用程序上下文中,以供其他组件使用。 下面是一个示例: ```java @Service public class ExampleService { @Autowired private ExampleRepository repository; public String getData() { return repository.getData(); } } // 测试类 @RunWith(SpringRunner.class) @SpringBootTest public class ExampleServiceTest { @MockBean private ExampleRepository repository; @Autowired private ExampleService service; @Test public void testGetData() { // 设置模拟对象的行为 when(repository.getData()).thenReturn("Mocked Data"); // 调用被测试方法 String result = service.getData(); // 验证方法调用和结果 verify(repository).getData(); assertEquals("Mocked Data", result); } } ``` 在上述示例中,`@MockBean` 注解用于创建一个模拟的 `ExampleRepository` Bean 对象,并将其注入到 `ExampleService` 中。通过 `when()` 方法设置了模拟对象的行为,并在测试方法中验证了方法的调用和结果。 总结而言,`@Mock` 注解用于 Mockito 框架中创建模拟对象,主要用于单元测试;而 `@MockBean` 注解用于 Spring Boot 中创建模拟的 Spring Bean 对象,主要用于集成测试或 Spring Boot单元测试

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值