单元测试Mock之Mockito使用教程

一、什么是Mockito

Mockito是一款用于java开发的mock测试框架,用于快速创建和配置mock对象。通过创建外部依赖的 Mock 对象, 然后将此 Mock 对象注入到测试类中,简化有外部依赖的类的测试。

假设我们需要对一个发奖系统服务做单元测试,服务的依赖关系如下:
在这里插入图片描述

为了完成RewardService的测试,我们需要去构建真实的DBService, CouponService, MemberService, 整个过程很长,涉及多个服务,数据构造工作比较繁琐困难。

这个时候,更简单快捷的方式就是通过mock的方式将依赖的服务使用虚拟的对象(即Mock的对象)来替代,直接mock出我们想要的数据来进行测试,方便快捷, 不需要关注那些的复杂的依赖了:
在这里插入图片描述

二、在springboot中使用Mockito

2.1 引入maven依赖

在项目pom.xml中引入依赖spring-boot-starter-test,内部就依赖了Mockito。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
</dependency>

在这里插入图片描述

2.2 关键代码解析
1、添加注解,mock服务
//mockito注解, 用于启用Spring和Mockito
@TestExecutionListeners(listeners = MockitoTestExecutionListener.class)
public class RewardServiceTestMock{

    //通过@MockBean注解,将TaskDubboService服务给mock掉
    @MockBean
    private RewardDubboService rewardDubboService;

首先,必须加这一行:@TestExecutionListeners(listeners = MockitoTestExecutionListener.class) ,用于启用Spring和Mockito,之前研究了半天用不起,报空指针,就是没有加这一行。

然后使用注解:@MockBean,把这个服务给mock掉。

2、mock接口返回内容
//mock接口返回内容
String msg1="[{\"class\":\"com.xxxx.RewardInfo\",\"rewardCount\":1,\"rewardName\":\"Mock请求1返回的奖励内容\"}]";

String msg1=xxxxxx, 这是定义你的接口返回内容。由于这个接口返回的内容是一个对象类型,所以还需要下面这句代码把String内容转换成指定的对象类型:

List<RewardInfo> mockResult1= JSONArray.parseArray(msg1,RewardInfo.class);
3、设置mock规则
Mockito.when(rewardDubboService.reward(ParamContext)).thenReturn(mockResult1);

表示当调用rewardService.reward(ParamContext)接口时,将接口的返回内容mock为之前定义的mockResult1的内容。

4、 调用接口
List<RewardInfo> result = rewardDubboService.reward(ParamContext);
String resultStr = JSONObject.toJSONString(result);

整体代码如下:

//mockito注解, 用于启用Spring和Mockito
@TestExecutionListeners(listeners = MockitoTestExecutionListener.class)
public class RewardServiceTestMock{

    //通过@MockBean注解,将TaskDubboService服务给mock掉
    @MockBean
    private RewardDubboService rewardDubboService;
	
	//mock接口返回内容
	String msg1="[{\"class\":\"com.xxxx.RewardInfo\",\"rewardCount\":1,\"rewardName\":\"Mock请求1返回的奖励内容\"}]";
	
	//把String内容转换成指定的对象类型
	List<RewardInfo> mockResult1= JSONArray.parseArray(msg1,RewardInfo.class);
	
	//设置mock规则
	Mockito.when(rewardDubboService.reward(ParamContext)).thenReturn(mockResult1);
	
	//调用接口
	List<RewardInfo> result = rewardDubboService.reward(ParamContext);
	String resultStr = JSONObject.toJSONString(result);

测试结果:

在这里插入图片描述

以上就是本次的全部内容,如果对你有帮助,欢迎关注我的微信公众号:程序员杨叔,各类文章都会第一时间在上面发布,持续分享全栈测试知识干货,你的支持就是作者更新最大的动力~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值