Mock(Mockito)单元测试实战

1、什么是Mock?

mock是在测试过程中,对于一些不容易构造/获取的对象,创建一个mock对象来模拟对象的行为。Mock就是可以给你制造任何你想要的对象,分层测试,你可以只测试controller或者service,而不需要牵扯到下层的调用,这样的话,测试就变得容易了。假设你的接口,有500种不同的返回结果,你要制造这500种返回结果来提高覆盖率
当你进行controller层的测试的时候,需要Mock掉service层

@Mock
private RouteServiceImpl routeService;

然后,你可以返回自己设置的、想要的、任意的内容,list是我期望返回的内容when(routeService.selectByRouteId(any())).thenReturn(list);

Mock有很多的实现框架,例如Mockito、EasyMock、Jmockit、PowerMock、Spock等等,SpringBoot默认的Mock框架是Mockito,和junit一样,只需要依赖spring-boot-starter-test就可以了。本文代码基于jdk8、junit4、Mockito3

1.1、 Mockito中文文档

Mockito是mocking框架,它让你用简洁的API做测试。而且Mockito简单易学,它可读性强和验证语法简洁。Mockito是GitHub上使用最广泛的Mock框架,并与JUnit结合使用.Mockito框架可以创建和配置mock对象.使用Mockito简化了具有外部依赖的类的测试开发!

中文文档

1.2、Mockito基本使用方法简介

对于前后端分离的项目而言,无法直接从前端静态代码中测试接口的正确性,因此可以通过MockMVC来模拟HTTP请求。基于RESTful风格的SpringMVC的测试,我们可以测试完整的Spring MVC流程,即从URL请求到控制器处理,再到视图渲染都可以测试。

初始化MockMvc对象(BaseUnitTest)

在这里插入图片描述

1)导包
在这里插入图片描述

  • xxTest 继承 BaseUnitTest

2)测试(只测试public的方法

//对目标测试类加@InjectMocks注解
@InjectMocks:创建一个实例,其余用@Mock(或@Spy)注解创建的mock将被注入到用该实例中。
//对目标测试类的依赖属性使用@mock创建依赖

在这里插入图片描述
公共变量

static String Key = “xxx”;

初始化Mock框架

在这里插入图片描述
公共开关抽取

Mockito.when(cacheFatctoryUtil.getJWIString(CacheConsts.JVM.TEST_KEY)).thenReturn(key);

测试方法

@Test
public void test方法名() throws Exception {
 //给方法参数赋值
String name = "aa";
//模拟支持视频的类型
Mockito.doReturn(",mp4,").when(cacheFactoryUtil).getJVMString(CacheConsts.JVM.VIDEO_TYPES);

//模拟视频截图出参
Response response = Mockito.mock(Response.class);
Result result = Mockito.mock(Result.class);
Result.Bean resultBean = new Result.Bean();
 //Result.Bean<String> resultBean = new Result.Bean<>();
resultBean.put("name","1");
resultBean.put("age","18");
Mockito.doReturn(response).when(远程调用服务).方法(Mockito.anyString(),Mockito.ang(Map.clas));
 //Mockito.doReturn(JSON.toJSONString(result)).when(result).toJSONString();
Mockito.doReturn(result).when(response).getResult();
Mockito.doReturn("0000" ).when(result).getReturnCode();
Mockito.doReturn("success").when(result).getReturnMessage();
Mockito.doReturn(resultBean).when(result).getBean();
//
//测试类中调用的别的方法 和需要赋值的参数
//
//进入需要测试的类的测试方法
xxxServer.方法名(方法参数);
}

2.0 mock实践

测试类继承 BaseUnitTest

(测试时可先注释,提高启动项目速度)

注入测试类及mock远程调用

@Autowired
@InjectMocks
private Xxxserver xxserver;

@Mock
private XxxSV xxxSV;

添加mock注解初始化

在这里插入图片描述

测试方法

类型一 :map

在这里插入图片描述

类型二 :DTO对象

只需setDTO对象
在这里插入图片描述

类型三:返回map集合

在这里插入图片描述
测试时只需 new 一个Map集合,put需要的值 返回这个Map集合即可
在这里插入图片描述

类型四:信息加解密

加密信息
在这里插入图片描述
des.decrypt();解密

类型五:缓存get/put

put2Cache(Boolean )

Mockito.doReturn(true).when(cacheServiceHanager).put2Cache(Mockito.anyString()

```[添加链接描述](https://mp.weixin.qq.com/s/rQRO2SaqhQImQlnA5NsEQw)
#### 类型六:List<DO>
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200930143920171.png#pic_center)

## Mockito 一个优秀的 Mock 测试框架

[Mockito 一个优秀的 Mock 测试框架](https://mp.weixin.qq.com/s/rQRO2SaqhQImQlnA5NsEQw)
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值