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 的学习资料, 有空自己 补一补...

最新文章

  1. 【tomcat】HTTPS访问配置 + restful调用远程HTTPS绕过验证
  2. Android 基于Android的手机邮件收发(JavaMail)之三(邮件接收)
  3. zkw费用流+当前弧优化
  4. BestCoder Round #61 1002 Game
  5. wp8 入门到精通 ---转换
  6. c# 基本值类型及其默认值
  7. RMAN的恢复篇
  8. win10应用部署到手机出现问题Exception from HRESULT: 0x80073CFD
  9. 关于接收json以及使用json
  10. github 坑爹的仓库初始化设置
  11. SqlServer高版本数据本分还原到低版本方法
  12. effective c++ 条款06 不想自动生成函数,就明确拒绝
  13. maven配置文件setting.xml字段注释
  14. 关于ONION/Wncry勒索病毒
  15. sed命令针对文件操作具体解释
  16. 优化表单数据的JS校验
  17. Gulp小记
  18. 求链表的倒数第m个元素
  19. SSL介绍(Secure socket Layer & Security Socket Layer)
  20. Anaconda下载及安装及查看安装的Python库用法

热门文章

  1. wxpython学习:创建最小的空的wxPython程序
  2. css 基础教程学习
  3. 自动生成admin(后台)
  4. Win10安装7 —— 系统的优化
  5. 一些java基础知识的备忘
  6. cf 手机短信问题
  7. Appium+python自动化-元素定位uiautomatorviewer的使用
  8. pick the stone game
  9. 任务调度问题(贪心) hdu4864
  10. 如何在MacOS的VScode上安装Python3