1. 概述

    1. 简述 test double

      1. mock, fake 之类的东西
  2. 背景
    1. 最近在看 google 软件测试之道

      1. 妈的 13 年的老书了
      2. 书里有提到 mock, fake, stub
      3. 刚好, 我又不太会
    2. 上网找相关的东西
      1. 发现了一个叫做 Test Double 的东西

1. Test Double

  1. 概述

    1. 测试替身
  2. 背景
    1. 单元测试中, 总会对外界产生依赖

      1. 要么依赖外界的参数
      2. 要么依赖外界的服务
    2. 但是如果真的依赖起来了...
      1. 一传十十传百, 就得起一套环境

        1. 可我就想写个 单元测试 啊喂...
    3. 于是, 有了 测试替身...
      1. 不是 JoJo 的那个替身...
      2. Double 就是 替身的意思
  3. Test Double
    1. 概述

      1. 在测试中用来充数的对象
    2. 目的
      1. 减少依赖
      2. 方便测试
    3. 分类
      1. Dummy

        1. 名称

          1. 哑对象
        2. 本质
          1. 一个普通的对象
          2. 但是却不会被使用...
        3. 场景
          1. 通常用来做 参数列表 的填充
      2. fake
        1. 名称

          1. 假对象
        2. 本质
          1. 确实是一个有逻辑的实现
          2. 但是这个实现仅仅为了完成测试, 所以会比较简陋
          3. 跟生产环境肯定没法比
        3. 场景
          1. 比如需要用 数据库 的时候,
          2. 我们可以用一个 fake, 连接到 redis 里取数据
      3. stub
        1. 名称

          1. 桩对象
        2. 本质
          1. 没有逻辑
          2. 只有固定的返回值
          3. 作用域很小, 只有测试的地方...
        3. 场景
          1. 测支付的时候, 需要返回成功
      4. spy
        1. 名称

          1. 间谍对象
        2. 本质
          1. 是一个 桩对象
          2. 但是多了一些 记录功能
        3. 场景
          1. 有个 模拟发邮件 的 spy
          2. 每次调用它, 就会返回成功
          3. 这个 spy 会记录你每次要发送的内容
            1. 可能是 调用参数 之类的
      5. mock
        1. 名称

          1. 模仿对象
        2. 本质
          1. 预定义了一系列的调用返回

            1. 如果符合 预期, 就 正常返回
            2. 如果不符合 预期, 就会 报异常
          2. 感觉比 stab 要稍微复杂点...
            1. 简单的说, 就是一个 带断言 的 stub

              1. 然后你问我, 为啥不直接用 断言...
              2. 其实, 我觉得...也可以...
              3. 而且用 mock 的话, 测试会更加真实, 自然...
        3. 场景
          1. 通常用来模拟 可能会触发异常, 的场景

            1. 这个用倒是用过, 可真的 一会半会 想不出来啥场景了...

              ps

  4. ref
    1. 浅析Mock,Fake和Stub在测试中的应用

      1. 一个相对靠谱的老哥

        1. ref 真的很全
    2. TestDouble
      1. 这个是 Martin Fowler 的博客

        1. 就是写 重构, 分析模式 的老哥
    3. Test Double
      1. 这是另一本书 xUnit Patterns 对这些的讲解
  5. 后续
    1. 找了些 mock 的学习资料, 有空自己 补一补...

测试理论 - Test Double的更多相关文章

  1. Go项目的测试代码3(测试替身Test Double)

    上一篇文章介绍了项目中测试代码的写法. Go项目的测试代码2(项目运用) 这里简单的共享一下测试替身. 当我们写测试代码的时候,经常遇到一个问题.跟别的模块或服务有依赖性,可是功能还没开发完.或是因为 ...

  2. 测试理论- the conten of test plan

    1 testing objects 测试对象 2 testing scope 测试范围 3 testing the frame (?) 4 the environment 5 reason for t ...

  3. 测试理论--branch testing and boundary testing

    1 branch testing 分支测试 测试代码的所有分支 2 boundary testing 测试 程序的限制条件

  4. 测试理论--web测试方法总结

    一.输入框 1.字符型输入框: (1)字符型输入框:英文全角.英文半角.数字.空或者空格.特殊字符“~!@#¥%……&*?[]{}”特别要注意单引号和&符号.禁止直接输入特殊字符时,使 ...

  5. 测试理论03-svn-缺陷及报告-jira

    回顾--用例设计方法 边界值(三个点,使用步骤) 判定表(适用,四个组成部分,规则,使用) 因果图(适用,四个符号,使用) 正交表(定义,特性,L_n(m^k),因素,水平,使用,工具allpairs ...

  6. App测试理论简介

    一.App测试常见关注点 1.App的功能测试 功能测试都是我们首要测试的,只有功能实现了才算符合上线发布的最低标准.我们需要检测产品功能是否已实现.产品功能是否符合设计要求.产品功能是否有重复.产品 ...

  7. 测试理论-selenium的工作原理

  8. 【星云测试】Wings-让单元测试智能全自动生成

    Wings-让单元测试智能全自动生成 前言 单元测试是保证软件质量非常有效的手段,无论是从测试理论早期介入测试的理念来看或是从单元测试不受UI影响可以高速批量验证的特性,所以业界所倡导的测试驱动开发, ...

  9. LINQ 函数的实战演练测试

    1.首先定义一个图书类.专门存放图书的属性信息. 代码如下:   //Book.cs using System; namespace LinqTest { public class Book { pu ...

随机推荐

  1. BugkuCTF flag.php(反序列化)

    进去后是个登录页面,但是login根本不会跳转,看源码也没提示,但是这道题给了一个提示:hint,那么盲猜应该是一个get参数,因为post不能跳转,那么get总有内容吧,跟上hint参数,随便赋一个 ...

  2. 转: VS 解决方案目录结构设置

    https://www.cnblogs.com/zuibunan/p/3843459.html 下面的文章也有介绍 https://blog.csdn.net/lp310018931/article/ ...

  3. 支付宝网站支付接口配置 RSA 公钥 私钥

    个人博客 地址:http://www.wenhaofan.com/article/20190419143333 下载签名工具 访问:https://docs.open.alipay.com/291/1 ...

  4. win10专业工作站版密钥|win10专业工作站版key|win10专业工作站版激活码

    一.windows10专业工作站零售版密钥 永久激活 Win 10 ProfessionalWorkstation Retail [Key]:DXG7C-N36C4-C4HTG-X4T3X-2YV77 ...

  5. 折半枚举+Hash(HDU1496升级版)

    题目链接:N - 方程的解 给定一个四元二次方程: Ax1^2+Bx2^2+Cx3^2+Dx4^2=0 试求−1000≤x1,x2,x3,x4≤1000非零整数解的个数. −10000≤A,B,C,D ...

  6. java学习笔记之IO编程—对象序列化

    对象序列化就是将内存中保存的对象以二进制数据流的形式进行处理,可以实现对象的保存或网络传输. 并不是所有的对象都可以被序列化,如果要序列化的对象,那么对象所在的类一定要实现java.io.Serial ...

  7. dev 控件用法2 之repositoryItemSearchLookUpEdit

    repositoryItemSearchLookUpEdit var y = userinfo.Select.ToList( a => new { userid = a.userid, code ...

  8. tomcat-embeded-core源码编译

    使用spring-boot创建web工程时,默认采用embeded tomcat作为容器,实际使用过程中,可能会需要对其中的某些功能做微调,而tomcat又没有给出预留配 ,这时就需要对tomcat- ...

  9. linux-crond_计划任务

    定时计划任务 主要文件介绍: [root@nginx ~]# ll /etc/cron* -d drwxr-xr-x. 2 root root 21 7月 11 20:28 /etc/cron.d d ...

  10. 2019-08-22 纪中NOIP模拟A&B组

    T1 [JZOJ3229] 回文子序列 题目描述 回文序列是指左右对称的序列.我们会给定一个N×M的矩阵,你需要从这个矩阵中找出一个P×P的子矩阵,使得这个子矩阵的每一列和每一行都是回文序列. 数据范 ...