Mock工具介绍,为什么使用Mock?

简介: Mock工具介绍,为什么使用Mock?

什么是Mock

   如果将mock单独翻译过来,其意义为 “虚假、虚设”,因此在软件开发领域,我们也可以将其理解成 “虚假数据”,或者 “真实数据的替身”。

为什么使用Mock

1.解除依赖,团队并行工作

接口尚未开发完成,在系统交互双方定义好接口之后,我们可以提前进行开发和测试,并不依赖上游系统的开发实现。

2.开启TDD模式,即测试驱动开发

单元测试是TDD的基石,当接口定义好后,测试人员就可以创建一个Mock,把接口添加到自动化测试环境中,提前创建测试。

3.隔离系统

通过编写Mock,隔离请求操作(Get、Post)对于数据库中数据的污染。

4.提升测试覆盖度

通过Mock接口返回的不同状态,来查看系统是否能够正常影响,提升测试的覆盖度。

5.方便演示

通过使用Mock模拟数据接口,我们即可在只开发了UI的情况下,无须服务端的开发就可以进行产品的演示。

除此之外,Mock可以加深我们对测试的理解,深入明白测试“输入”和“输出”的不同表达形式,同时还能提高自身技术,脱离功能测试对于开发的依赖。

市面上常见的Mock工具

市面上常见的Mock分为单元测试级别的Mock工具和接口测试级别的Mock工具

单元测试级别的mock工具

单元测试级别的Mock工具有Easymock、jMock、Mockito、Unitils Mock、PowerMock、JMockit等。

EasyMock

EasyMock 是一套用于通过简单的方法对于给定的接口生成 Mock 对象的类库。它提供对接口的模拟,能够通过录制、回放、检查三步来完成大体的测试过程,可以验证方法的调用种类、次数、顺序,可以令 Mock 对象返回指定的值或抛出指定异常。通过 EasyMock,我们可以方便的构造 Mock 对象从而使单元测试顺利进行。

JMock

JMock是一个使用模拟对象机制测试Java代码的开发包。模拟对象(Mock Object)可以取代真实对象的位置,用于测试一些与真实对象进行交互或依赖于真实对象的功能,模拟对象的背后目的就是创建一个轻量级的、可控制的对象来代替测试中需要的真实对象,模拟真实对象的行为和功能,方便我们的测试。JMock就是这种机制的实现,使用JMock我们可以快速创建模拟对象,定义交互过程中的约束条件等,同时JMock也是易扩展的,你可以很方便添加自定义的需求。  

Mockito

Mockito 无需准备昂贵的前期启动。他们的目标是透明的,让开发人员专注于测试选定的行为。

Mockito 拥有的非常少的 API,所有开始使用 Mockito,几乎没有时间成本。因为只有一种创造 mock 的方式。只要记住,在执行前 stub,而后在交互中验证。你很快就会发现这样 TDD java 代码是多么自然。

单元测试Mock工具对比

Features:

Feature

EasyMock

jMock

Mockito

UnitilsMock

PowerMock(EasyMock)

PowerMock(Mockito)

JMockit

Invocation count constraints(调用数限制)
Recording strict expectations(记录严格的预期结果)
Explicit verification(显式验证)
Partial mocking(部分mock)
Easier argument matching based on properties of value objects(基于值对象属性的简化参数匹配)
Cascading mocks(级联mock)
Mocking of multiple interfaces(多接口mock)
Mocking of annotation types(注释类型mock)
Partially ordered expectations
Auto-injection of mocks(mock的自动注入)
Mocking of enums(枚举的mock)
Declarative mocks for test methods (mock parameters)
Mocking of unspecified implementation classes(未实现接口类的mock)
“Duck typing” fakes for integration tests
Total 4/14 4/14 8/14 6/14 5/14 9/14 14/14

Qualities:

Feature

EasyMock

jMock

Mockito

UnitilsMock

PowerMock(EasyMock)

PowerMock(Mockito)

JMockit

Argument matchers for some parameters only, not all
No method call to switch from record to replay(切换记录回放时无方法调用)
No extra code for implicit verification(隐式验证没有额外代码) N/A N/A N/A
No extra “prepare for test” code(没有额外的”prepare for test”代码)
No need to use @RunWith annotation or base test class(不需要用@runwith注解和测试基类)
Consistent syntax between void and non-void methods(空和非空方法的语法一致)
Mocking of constructors and final/static/private methods(构造函数、final、static和private方法的mock)
Mocking of “new-ed” objects(“new-ed”对象的mock)
Support for covariant return types
Single jar file in the classpath is sufficient to use mocking API(在classpath中的单个jar文件就能够使用mockAPI N/A N/A
Total 2/10 3/10 4/9 4/9 2/9 3/8 10/10

接口测试级别的mock工具

接口测试级别的Mock工具有RAP、Yapi、Moco等。

RAP

RAP是阿里团队出的一款接口管理工具,帮助开发人员有效的管理接口文档。包括阿里集团在内的三百五十多个企业都在使用RAP管理重要的接口文档。

Web接口管理工具,接口自动化,MOCK数据自动生成,自动化测试

能够通过分析接口结构自动生成Mock数据、校验真实接口的正确性

阿里产品,功能完善、结合了文档、Mock.js、可视化、Rest、接口过渡、文档修改提醒、支持本地部署

Yapi

YApi是去哪儿网移动架构组开发的一个开源项目,YApi的 Mock 功能可以根据用户的输入接口信息如协议、URL、接口名、请求头、请求参数、返回数据、生成 Mock 接口,这些接口会自动生成模拟数据,创建者可以自由构造需要的数据。mock模拟数据基于mock.js。

Mock.js 是一款模拟数据生成器,旨在帮助前端独立于后端进行开发,帮助编写单元测试。提供了以下模拟功能:

根据数据模板生成模拟数据

模拟 Ajax 请求,生成并返回模拟数据

基于 HTML 模板生成模拟数据

Moco

Moco 是一个简单搭建 stub 的框架,主要用于测试和集成。

Moco本身支持API和独立运行两种方式。通过使用API,开发人员可以在JUnit、JBehave等测试测试框架里使用Moco,极大程度地降低了集成点测试的复杂度

Moco可以提供以下服务:

HTTP APIs

Socket APIs

REST API

接口测试Mock工具对比

Yapi

Rap

Moco

方便集成 ×
Mock简便性
文档管理 × ×
开源程度
部署难度
可视化界面 ×
目录
相关文章
|
NoSQL openCL Linux
Linux调试工具—gdb
Linux调试工具—gdb
|
JavaScript 关系型数据库 测试技术
接口文档管理神器RAP2安装和部署
一 RAP2 RAP2是在RAP1基础上重做的新项目,它包含两个组件(对应两个Github Repository)。 rap2-delos: 后端数据API服务器,基于Koa + MySQLlink rap2-dolores: 前端静态资源,基于React link 什么是RAP? rap是一款API 文档管理工具,在 RAP 中,可以定义接口的 URL、请求 & 响应细节格式等等。
14195 0
|
量子技术 Python
探索绝对零度的极限:量子计算机的冷却技术
探索绝对零度的极限:量子计算机的冷却技术
539 9
|
7月前
|
监控 Java 数据库
从零学 Dropwizard:手把手搭轻量 Java 微服务,告别 Spring 臃肿
Dropwizard 整合 Jetty、Jersey 等成熟组件,开箱即用,无需复杂配置。轻量高效,启动快,资源占用少,内置监控、健康检查与安全防护,搭配 Docker 部署便捷,是构建生产级 Java 微服务的极简利器。
767 117
|
12月前
|
JSON 人工智能 前端开发
用markdown语法制作一个好看的网址导航页面(markdown-web-nav)
这是一篇关于创建网址导航页面的工具分享文章。作者介绍了从手动编写HTML代码到开发可视化工具 *markdown-web-nav* 的历程,旨在简化网址管理与导航页面生成的过程。该工具支持新增、编辑和删除网址数据,通过导入/导出JSON文件、实时预览Markdown效果以及一键复制等功能,让用户轻松制作美观的网站导航页面。文章还提供了详细的操作步骤及常见问题解答,如还原数据、获取网站图标链接等,适合不同技术水平的用户使用。
630 28
|
人工智能 JSON API
一张图读懂大模型应用是如何工作的,一图胜千言
用一张图,带你轻松读懂大模型应用的工作原理。不需要复杂的代码和艰深的理论,只需要一张图,就能让你对大模型有一个全新的认识
一张图读懂大模型应用是如何工作的,一图胜千言
|
Web App开发 人工智能 安全
Gemini vs ChatGPT:谷歌最新的AI和ChatGPT相比,谁更强?
Gemini vs ChatGPT:谷歌最新的AI和ChatGPT相比,谁更强?
|
存储 大数据 Apache
大数据治理系统框架Apache Atlas实践
大数据元数据和数据管理框架 Apache Atlas实践 今天技术小伙伴占卫同学分享了Apache Atlas元数据管理实践,被atlas的强大的血缘关系管理能力震撼,以下为本次分享内容: •Apache Atlas简介 •Apache Atlas架构 ...
10395 0

热门文章

最新文章