概述
1,定义:mock是在测试过程中,对于一些不容易构造/获取的对象,创建一个mock对象来模拟对象的行为
2:使用:当单元测试/接口测试中测试对象依赖其他对象,这些对象的构造复杂、耗时或者根本无法构造(未交付),而我们只测试对象内部逻辑的质量,不关心依赖对象的逻辑正确性和稳定性时,我们使用mock
3,原则:
-
不需要对所有的依赖对象/服务进行mock,只对那些构造步骤复杂、构造耗时较长、不稳定的依赖对象/服务进行mock。
-
如果做分层测试(比如分层自动化),高层的测试设计可以基于以下假设:低层的测试已保证低层对象的质量,高层对低层的依赖可以mock,无需关心所依赖的低层对象的质量。
转自:https://www.jianshu.com/p/3944c0b82f30
4,对于前端来说,mock是一个模拟数据生成器,能帮助前端独立于后端进行开发,帮助编写单元测试。mock有如下功能:
-
根据数据模板生成模板数据
-
模拟ajax请求,生成请求数据
-
基于html模板生成模拟数据
5,工具:前端js端拦截mock.js,web端的mock工具apiary、swagger、alibaba-rap等,web端的mock以http请求拦截为主,进行请求的数据的返回
6,Mock.js 生成随机数据,拦截 Ajax 请求
安装和示例:
# 安装
npm install mockjs
// 使用 Mock
var Mock = require('mockjs')
var data = Mock.mock({
// 属性 list 的值是一个数组,其中含有 1 到 10 个元素
'list|1-10': [{
// 属性 id 是一个自增数,起始值为 1,每次增 1
'id|+1': 1
}]
})
// 输出结果
console.log(JSON.stringify(data, null, 4))
7,常见的前端Mock方案分为4种:
-
在代码层硬编码
比如有一个函数负责请求某个接口,获得的回返数据,并对该回返数据进行操作。那么可以通过硬编码的方式,直接定义一个数据变量在代码中,该变量保存了回返的Mock数据。这种Mock方法操作比较简单,但缺点也很明显,就是Mock更改了代码逻辑,和代码耦合性太强。而且并不能模拟真实的网络请求的过程,局限性强,覆盖面窄。 -
在前端JS中拦截
典型的解决方案就是Mock.js,通过在业务代码前挂载该JS文件,就可以无痛拦截Ajax请求。这种Mock方式相较于硬编码,虽然实现了Mock与代码的部分解耦,但无法完全和业务代码解耦(因为必须挂载一个JS并进行Mock配置)。虽然提供了大量的Mock API,但是也仍然无法发出真实的网络请求,模拟真实度不够。另外这种方式还存在一些不足,因为是对XHR对象的改写,有些情况下兼容性并不好,比如IE8等低版本浏览器,还有较新的Fetch API也拦截不到。 -
代理软件(Fiddler、Charles)拦截
Fiddler和Charles可以对网络请求进行拦截,将其替换为我们需要的Mock数据,这也不失为一种Mock方式。其优点主要是真实性强,但这种方式操作步骤比较繁琐,不方便统一配置,Mock成本较高。 -
Mock-Server
最合适的方案无外乎搭建独立的Mock-Server,开发的前期阶段,所有的接口都会指向该Mock-Server。因为可能存在跨域的情况,所以一般都需要在开发环境搭配一套接口代理做搭配。这种方案对业务代码完全不具有侵入性,并且通用性强。缺点也很明显,成本高(还需要另起一个Mock-Server服务,并对其进行管理)。
转自:https://www.jianshu.com/p/720b12b5d120 作者:可木Changer
最后
以上就是帅气火为你收集整理的Mock服务的全部内容,希望文章能够帮你解决Mock服务所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复