thx是什么意思_漫话:圣诞夜,如何给女朋友解释什么是Mock?| IDCF

1f23dd1bc35078b86a237b6a1711c947.png

某天晚上,接到测试的电话,他问为什么在日常环境我的接口使用不同的用户测试返回的内容都一样,我回答他:接口数据被我mock掉了,现在返回的都是mock数据,需要调一下mock的逻辑才行。

挂断电话之后,女朋友满怀好奇的来问我:

ae445de23bd4f8e198f7c2d5bcbb0338.png
102cf71f6a0a6db73893a71d142de28c.png
57e2cdeae63f42b1211ec83ff3c903b9.png
500946bf5ccbc3f394ab6356f4c64121.png

Mock,直译过来的话是虚假的意思,但是在面向对象程序设计中,一般翻译成模拟。如接口mock、mock对象等,通常表示接口模拟、模拟对象等。

在程序开发中,一般在两种场景中会是用到mock技术:第一种是在单元测试的时候,第二种是在接口测试的时候。

ea59f1e9e99562211d3d6b33c1b99599.png
67e43f7718435f0a9347016afe2647c9.png

一、单元测试mock

最初,mock主要应用在单元测试中,因为单元测试的目的是只想针对自己关注的这个"单元"部分进行测试,所以需要对屏蔽掉一些外部依赖的影响,这时候就可以使用mock技术。

不仅仅是软件开发领域的单元测试,其实在很多工业测试场景中,也会使用一些Mock技术,比如常见的汽车碰撞测试。

汽车在上市之前都需要经过碰撞测试,并且公布测试结果。碰撞测试过程中需要通过真实撞击来评定汽车的耐撞能力以及对内部驾驶人员的保护能力。

0ded1d682ea843684e2f12aca02960ba.png

但是,为了保证验证的准确性,有为了保证测试人员的安全,一般会采用假人来进行测试。这些假人都是经过特制的,他们的生物学性能一般和真人是一样的,比如体重、关节能力、组织强度等。

而且有时候,为了保证测试的全面性,还会采用各种各样的假人,如成年人、老人、小孩子、男性、女性等都需要充分测试到。

所以,这个假人其实就是一个Mock对象。在软件单元测试中,我们也需要用到这些测试对象。目的也类似,就是为了保证测试的全面性及准确性。

之所以要在测试中使用Mock对象,其实有很多原因,其中最重要的原因就是真实对象的构造成本太高。这时候一般就会采用mock对象。

而市面上也有很多工具可以方便的帮助我们进行单元测试的mock,如Easymock、jMock、Mockito、Unitils Mock、PowerMock、JMockit等。

其中比较常用的就是Easymock(https://easymock.org/ )、JMockit(https://jmockit.github.io/index.html )和Mockito(https://site.mockito.org/ )这三种,用起来都比较简单。

关于这些工具的对比,在JMockit官网中有一张图还是挺明显的,如下:

62dd09a3b66ccb2360cdff1b7cbf9c77.png
ac6b71d871e604e69981741db7a89026.png
fa5d059b10204b5a8572243be2eb4926.png
ab631018dbfe4e236e82c3391e54b8ca.png
2198c5bc0a1c3bf15ba8697b98fb4d55.png

二、接口mock

如我们的要测试的一个方法,其中依赖了一个RPC远程服务,因为远程服务的返回值可能是各种各样的,我们为了测试我们的接口的鲁棒性,就会针对各种边界情况进行充分测试。

如果把外部接口mock掉,也就是把外部接口的返回值当做一个mock对象,那么我们就可以很方便的模拟各种情况。如外部接口正常返回、异常返回、请求超时等等,都可以很方便的被测试。

其实,随着软件开发这么多年的发展,mock技术已经不仅仅局限于单元测试阶段了,尤其是随着微服务的兴起,应用拆分的越来越细,应用间依赖也越来越多。

5cc0911e229374ae44e9f848fce669f5.png

这时候Mock技术就显得尤为重要了。

很多时候,一个项目中,大家可能是同时开发的,而我们的很多下游依赖可能还没开完完,或者有些特殊case没办法构造,那这时候就可以利用mock技术来mock掉下游接口。

我们日常开发中用到的时候很多,比如日常开发环境调用支付宝,我们需要经常构造诸如协议过期、余额不足、请求超时、账户不存在等case的时候,就可以想办法将他们的接口mock掉。

市面上现在也有很多接口mock工具可以使用,如RAP、Yapi、Moco和DOClever等。

8dfd4273d8ae34d5a03ce434445dd726.png
7c7a1458e8948e5f46451857c4d78188.png

2.1 RAP

RAP是阿里团队出的一款接口管理工具,能给你提供方便的接口文档管理、Mock、导出等功能。他可以通过分析接口结构,动态生成模拟数据,校验真实接口正确性,围绕接口定义,通过一系列自动化工具提升我们的协作效率。

现在该项目已暂停维护,但是官方团队推出了RAP2,RAP2 是在 RAP1 基础上重做的新项目,项目地址:https://github.com/thx/rap2-delos

928b9481e5e197bb706b29abef8e95a0.png

2.2 YApi

YApi是去哪儿网移动架构组开发的一个开源项目,旨在为开发、产品、测试人员提供更优雅的接口管理服务。可以帮助开发者轻松创建、发布、维护 API。官网地址:https://hellosean1025.github.io/yapi/

b209b643359df81603b2e703a7acbf45.png

2.3 Moco

Moco 是一个搭建模拟服务器的工具,其支持 API 和独立运行两种方式,前者通常是在 junit 等测试框架中使用,后者则是通过运行一个 jar 包开启服务。项目地址:https://github.com/dreamhead/moco

2.4 DOClever

DOClever是一个可视化免费开源的接口管理工具 ,可以分析接口结构,校验接口正确性, 围绕接口定义文档,通过一系列自动化工具提升我们的协作效率。主要提供接口信息管理、接口调试运行、接口Mock、自动化测试、团队协作等功能。官网地址:http://doclever.cn/controller/index/index.html

af6564edeb763ab62be44b92b67190e2.png
81afb2edf844ba4cc586c8ad8fa0234d.png
12caade9295108814d7316e067eeff21.png
2998c151dc1098d7fd832adc48bc1e38.png
663056ceb63e5a6126c93ece37107e20.png
cc538a50ff89b33706fb82ff022f6cbf.png
fc60c82710e783bcb052cffcef88b3ac.png
172558547de5ae03b7b98684a7a7f8df.png
f97b4a61a8ce0b59627dfa7676b01d17.png

+“CH050791”后 回“IDCF”,可入qun交流~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值