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简便性
文档管理 × ×
开源程度
部署难度
可视化界面 ×
目录
相关文章
|
4月前
阿萨学工具:Apifox 用Mock.js写高级Mock的期望
阿萨学工具:Apifox 用Mock.js写高级Mock的期望
|
7月前
|
前端开发
什么是 Mock 测试?掌握 Mock 测试的核心原理
Mock 的意思就是,当你很难拿到源数据时,你可以使用某些手段,去获取到跟源数据相似的假数据,拿着这些假数据,前端可以先行开发,而不需要等待后端给了数据后再开发。
|
7月前
|
XML 前端开发 测试技术
【前端小技巧】如何使用 Eolink Apilkit 调用 Mock ?
在开发过程中,进度比较赶的情况下,前端人员当页面写完时,后台的接口还没写完,等要交付的时候后端才把接口给你,这个时候就很尴尬。 这个时候 Mock 就可以很好的解决这个问题,前端团队可以在 API 还没开发完成的情况下,借助 Mock API 实现预对接,加速开发进程。测试团队可以通过 Mock API 解决不必要的系统,完成集成测试。 Eolink Apikit 为前端工程师提供 API 文档管理,快速接口测试,以及 Mock API 创建与调用,及查看文档变更历史的能力。有助于前端工程师快速查看 API 文档详情与历史记录,快速生成和使用 Mock API 提前进行页面效果验证。
33 0
|
5月前
|
JavaScript 数据安全/隐私保护
|
5月前
|
前端开发 Linux Docker
DOClever安装和mock数据基础教程
DOClever安装和mock数据基础教程
|
11月前
|
前端开发 JavaScript 测试技术
前端封装库/工具库的mock数据之Mock.js
在Web应用程序开发过程中,通常需要使用后台API接口来获取数据。然而,在开发初期或者没有后台接口的情况下,我们需要模拟数据来进行开发和测试。为了更好地实现这项任务,前端封装库/工具库的出现成为一个非常好的解决方案。其中一款备受关注的mock数据库是Mock.js。
291 0
部署自己的MOCK(二)
本文适合团队内部没有MOCK服务,对mock有实际需要的小伙伴。
|
NoSQL JavaScript 前端开发
部署自己的MOCK(一)
本文适合团队内部没有MOCK服务,对mock有实际需要的小伙伴。
部署自己的MOCK(一)
|
开发框架 JSON 前端开发
接口自动化测试之Mock
  在某些时候,后端在开发接口的时候,处理逻辑非常复杂,在测试的时候,后端在未完成接口的情况下该如何去测试呢?   我们需要测试,但是有些请求又需要修改一下参数,或者改变一下request实现的方式,比如修改状态码,产生的图片要进行替换,或者是替换执行文件等
446 0
|
JSON 前端开发 大数据
接口测试 Mock 实战(二) | 结合 jq 完成批量化的手工 Mock
因为本章的内容是使用jq工具配合完成,因此在开始部分会先花一定的篇幅介绍jq机器使用,如果读者已经熟悉jq,可以直接跳过这部分。 先来看应用场景,App 经常会有一些信息展示的列表页,比如商家的菜品、股票的公司、文章的列表展示等,例如下面这样: 菜品不够吃的话~不是,是菜品数量较少不够测试的量,假如我们想要测试几百个菜品时,会不会在刷的时候是否有性能影响,展示是否正常,列表展示的边界值测试等;