关于mock

一、什么是mock?

通俗来讲,在开发和测试过程中,由于环境不稳定或者协同开发的同事未完成等情况下,有些数据不容易构造或者不容易获取,就创建一个虚拟的对象或者数据样本,用来辅助开发或者测试工作。减轻了对于协同模块的依赖,使开发以及测试变得更加独立。

二、为什么要使用mock?

现在的很多项目,基本都是划分为一个个小模块进行的,各个模块相互依赖,需要协同进行。但是实际开发过程中,由于各种原因,某些模块在当下可能是不可用的,这就对耦合较高的协同模块会产生不良影响,而使用mock,制造模拟数据,可以减轻这种负面因素。

如下的一些场景,可以使用mock很大程度上减轻这些负面影响。

  1. 所需要数据难以获取(比如后端接口没写好,异常、特殊场景的数据):这些特殊情况和场景下,可能生成一段真实数据很浪费时间,或者当下做不到。而使用mock比真实数据方便很多,此时mock就相当于真实接口数据的替代品,辅助其他相关联模块的开发;
  2. 前后端分离,并行开发:前后端商定好接口标准后,按照统一的标准进行同时开发,规避对互相的依赖,减少时间浪费;
  3. 前后端分离中,对于某些特殊接口,可能不能实际执行,不然会对数据造成污染,此时可以mock一个返回数据,规避此情况,而又不影响实际开发;
  4. 自动化测试:如果在自动化测试中,出现了第三方数据不稳定或者其他情况,会影响测试进度,以及不方便定位问题所在。此时如果利用mock技术,模拟一种其他模块都是正常的场景,专门测试当前模块,可以减轻这种异常情况的干扰,方便定位问题;并且可以自己创造各种不同的数据,方便覆盖测试的各种情况。

三、mock的优缺点分析

优点:

  1. 将本模块通过mock隔离起来,避免因为其他模块的问题,导致自身模块出现异常;
  2. 前后端分离式开发中,通过制定好的接口规范,并行开发,提高总体开发效率;
  3. 测试过程中,所依赖的模块异常时,可以使用mock数据替代,不影响测试进度;
  4. 对于一些难构建的数据,可以使用mock来模拟;

风险:

  1. 测试的过程中,如果大量使用mock,会使mock测试的场景失去了真实性,可能会到接入真实数据的时候才会发现缺陷,会造成后续修复成本较高。

关于mock的更多相关文章

  1. Pramp mock interview (4th practice): Matrix Spiral Print

    March 16, 2016 Problem statement:Given a 2D array (matrix) named M, print all items of M in a spiral ...

  2. Google C++单元测试框架GoogleTest---Google Mock简介--概念及基础语法

    就在昨天终于做了gtest的分享,我的预研工作终于结束了,感觉离我辞职的日子不远了,毕竟是专注java二百年啊,要告别实习啦.. 这篇是GoogleMock的简介文档,会在后边附带一个自己的例子. 一 ...

  3. Pramp - mock interview experience

    Pramp - mock interview experience   February 23, 2016 Read the article today from hackerRank blog on ...

  4. Spring Mock

    今天看别人的测试代码,发现有  MockMvc.MockHttpServletRequest.MockHttpServletResponse ,不知道是干啥的,百度下下才知道  Mock这个东东. 下 ...

  5. Python mock

    在测试过程中,为了更好地展开单元测试,mock一些数据跟对象在所难免,下面讲一下python的mock的简单用法. 关于python mock,网上有很多资料,这里不会讲的特别深,但一定会是实用为主, ...

  6. ABP中单元测试的技巧:Mock和数据驱动

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:虽然ABP为大家提供了测试的脚手架了,不过有些小技巧还是需要自己探索的. ASP.NE ...

  7. [转] 前后端分离开发模式的 mock 平台预研

    引入 mock(模拟): 是在项目测试中,对项目外部或不容易获取的对象/接口,用一个虚拟的对象/接口来模拟,以便测试. 背景 前后端分离 前后端仅仅通过异步接口(AJAX/JSONP)来编程 前后端都 ...

  8. What's the difference between a stub and mock?

    I believe the biggest distinction is that a stub you have already written with predetermined behavio ...

  9. Nova PhoneGap框架 第六章 使用Mock

    在我们的框架中引入了一个很重要的设计,那就是使用Mock. 这里的mock是指cordova.mock.js文件,它模拟了PhoneGap(Cordova)的API,从而可以在浏览器中运行测试我们的程 ...

  10. mock.js

    mock.js http://mockjs.com/ https://github.com/nuysoft/Mock/wiki 为了完成angularjs的karma测试,看到这个好东东,这货能拦截a ...

随机推荐

  1. Elasticsearch由浅入深(一)

    什么是Elasticsearch 什么是搜索 百度:我们比如说想找寻任何的信息的时候,就会上百度去搜索一下,比如说找一部自己喜欢的电影,或者说找一本喜欢的书,或者找一条感兴趣的新闻(提到搜索的第一印象 ...

  2. Kali Linux无法访问网络的问题

    首先 ping www.baidu.com ping: unkown host www.baidu.com 然后 ping 8.8.8.8 connect:network is unreachable ...

  3. 2019基于Hexo快速搭建个人博客,打造一个炫酷博客(1)-奥怪的小栈

    本文转载于:奥怪的小栈 这篇文章告诉你如何在2019快速上手搭建一个像我一样的博客:基于HEXO+Github搭建.并完成SEO优化,打造一个炫酷博客. 本站基于HEXO+Github搭建.所以你需要 ...

  4. lombok 下的@Builder注解用法

    pom依赖 <dependency> <groupId>org.projectlombok</groupId>            <artifactId& ...

  5. windows系统查询指定端口运行的进程并关闭

    假如占用的端口是80: 先打开cmd命令窗口 再查找80端口占用的进程:netstat  -aon|findstr  "80"    ,找到对应的程序的PID号: 根据PID号找到 ...

  6. php中++ --运算

    $x = 5; echo $x; echo "---"; // echo ++$x + $x; //6+6=12 $x=6 // echo ++$x + 5; //6+5=12 $ ...

  7. MSIL实用指南-struct的生成和操作

    struct(结构)是一种值类型,用于将一组相关的信息变量组织为一个单一的变量实体.所有的结构都继承自System.ValueType类,因此是一种值类型,也就是说,struct实例分配在线程的堆栈( ...

  8. yield 实现range()函数

    def range(*args,step= 1): args = list(args) if len(args) == 2: yield args[0] while args[0]<args[1 ...

  9. 检查python标识符是否有效

  10. go从文件中读取json字符串并转换

    go从文件中读取json字符串并转换 将要读取的文件的一部分 [ { "children": [ { "children": [ { "code&qu ...