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

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

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

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

单元测试mock

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

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

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

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

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

所以,这个假人其实就是一个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官网中有一张图还是挺明显的,如下:

接口mock

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

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

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

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

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

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

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

RAP

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

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

YApi

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

Moco

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

DOClever

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

福利时间

感谢大家一直以来的陪伴与支持

今天给大家赠送6本书

北京大学出版社赞助

分布式一致性算法

赵辰 著

系统 详尽 生产级 完整

自己动手 从零开始编写Raft算法来实现分布式一致性算法!

《分布式一致性算法开发实战》内容简介:本书分析了分布式一致性Raft算法以及Raft算法所依赖的理论,在此基础上讲解并实现Raft算法以及基于Raft算法的KV服务。通过本书,你可以深入了解Raft算法的运行机制,也可以学习到如何正确地实现Raft。

本书分为11章,第一章介绍分布式一致性算法,第二章详细分析Raft算法,第三章在第二章基础上整体设计,第四章到第八章逐个讲解基于Raft算法的KV服务的各个组件的实现,第九章讲解Raft算法的主要优化之一的日志快照,第十章是生产环境必须的服务器成员变更功能,最后一章介绍其他一些相关的Raft优化。

本书详细介绍了Raft的核心算法、服务器成员变更以及各种优化的实现,适合想尝试实现Raft算法或者在生产环境中加入Raft算法的读者,以及对于分布式一致性算法有兴趣的读者。

也欢迎大家自行购买

本次送书不需要评论,也不需要转发

采用最公平的抽奖方式。

关注公众号:码出未来

公众号后台回复:送书

即可参与抽奖


关于作者漫话编程,是一个通过漫画+音频的形式讲解枯燥的编程知识的公众号。致力于让编程变得更有乐趣。

推荐阅读:

  • 漫话:如何给女朋友解释什么是语法糖?

  • 漫话:为什么Java中的main方法必须是public static void的?

  • 漫话:如何给女朋友解释什么是删库跑路?

  • 漫话:如何给女朋友解释为什么计算机中 0.2 + 0.1 不等于 0.3 ?

喜欢我可以给我设为星标哦

好文章,我“在看”

漫话:如何给女朋友解释什么是Mock?相关推荐

  1. 漫话:如何给女朋友解释什么是3PC?

    一顿愉快的小火锅之后,悠哉悠哉的回家了,于是只能开始新一轮的家庭科普了. 分布式一致性 幸好在<漫话:如何给女朋友解释什么是2PC(二阶段提交)?>中介绍过关于2PC的知识,要不然这事儿可 ...

  2. 漫话:如何给女朋友解释什么是适配器模式?

    本文经授权转载自微信公众号:漫话编程 周末窝在家里面打王者荣耀,女朋友在旁边玩我的电脑,我嫌她播放的综艺节目声音比较大,于是建议她戴耳机. 适配器模式 Adapter Pattern,通常被翻译成适配 ...

  3. 漫话:如何给女朋友解释什么是BIO、NIO和AIO?

    本文经授权转载自微信公众号:漫话编程 周末午后,在家里面进行电话面试,我问了面试者几个关于IO的问题,其中包括什么是BIO.NIO和AIO?三者有什么区别?具体如何使用等问题,但是面试者回答的并不是很 ...

  4. java 日期加一天_漫话:如何给女朋友解释为什么一到年底,部分网站就会出现日期混乱的现象?...

    2019年最后一天,在家里看着跨年晚会,享受着这一年最后一天的闲暇时光,女朋友在旁边玩手机.看了一会之后她突然问我一些很奇怪的问题. 于是我拿过他的手机,看到了下面这一幕: 这是微信官方出的公众号管理 ...

  5. 漫话:如何给女朋友解释什么是 3PC?

    作者 | 漫话编程 本文经授权转载自漫话编程(ID:mhcoding) 责编 | 胡巍巍 一顿愉快的小火锅之后,悠哉悠哉的回家了,于是只能开始新一轮的家庭科普了. 分布式一致性 幸好在<漫话:如 ...

  6. 漫话:如何给女朋友解释什么是语法糖?

    语法糖 语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家Peter J. Landin发明的一个技术术语,指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响, ...

  7. 漫话:如何给女朋友解释为什么吴某凡会被中间人攻击?

    中间人攻击 中间人攻击(Man-in-the-middle attack,缩写:MITM)在密码学和计算机安全领域中是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们 ...

  8. 漫话:如何给女朋友解释什么是大案牍术?

    听说最近<长安十二时辰>比较火,于是趁着一个周末赶紧补一补剧.相信很多人都对其中的"大案牍术"比较感兴趣,靖安司说"大案牍术"选中了张小敬. 看到这 ...

  9. 漫话:如何给女朋友解释什么是熔断?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 最近比较忙,白天上班,晚上还得面试,都没有时间关注新闻.某天晚上刚 ...

最新文章

  1. Tomcat:Connection reset by peer: socket write error
  2. 由于c语言是由字符流组成的,C语言试题及答案
  3. Java 的插件框架 PF4J
  4. C 之父:C 的成功属于意料之外,C 11是转折点
  5. linux 移动硬盘 mnt,linux 移动硬盘 mnt
  6. ffmpeg-0.8 移植到 windows 开源代码
  7. 视频抽帧并存图 python_使用Python实现跳帧截取视频帧
  8. Java课程设计——学生信息系统(团队)
  9. ubuntu更改主机名
  10. withRouter有什么用?干嘛用?为啥要用它啊???一分钟理解!
  11. blaster 驱动_为什么2020年IR Blaster在手机上仍然有用
  12. Tomcat6 无法登陆Tomcat Manager
  13. 微信转账被拉黑 遇到渣人该怎么追回损失?
  14. 二叉树期权定价python代码_期权的二叉树定价模型
  15. 转:: 刺鸟:用python来开发webgame服务端(2)
  16. 微信公众平台消息管理与群发图文教程
  17. VS2008假死点击无反应解决办法
  18. 随着裁员浪潮滚滚而来,科技工作者的泡沫是否即将破灭?
  19. 安装ktorrent amule 下载edk2 迅雷文件
  20. JS实现线条动态背景

热门文章

  1. 如何去掉chrome浏览知乎时的大标题栏
  2. 宝洁聚焦“用爱指引”的2020东京奥运会参赛运动员,称颂他们的举动,并鼓励其他运动员采取积极行动
  3. 第五章 业务架构,5.5 菜鸟双11“十亿级包裹”之战(作者:兰博)
  4. php 代码延迟执行,php和js编程中的延迟执行效果的代码
  5. 安卓系统怎么安装软件_树莓派安装安卓6.0系统
  6. 【调剂】河南理工大学2023年硕士研究生调剂信息公布
  7. android6如何支持NFC,小米6有NFC吗?小米6支持NFC功能吗?
  8. MySQL50题练习
  9. 手机和工业计算机运算能力对比,你真的了解手机CPU与电脑CPU的差别吗?!
  10. 当今职场上广为流传的十大精辟语录