测试理论 - Test Double
- 概述
- 简述 test double
- mock, fake 之类的东西
- 简述 test double
- 背景
- 最近在看 google 软件测试之道
- 妈的 13 年的老书了
- 书里有提到 mock, fake, stub
- 刚好, 我又不太会
- 上网找相关的东西
- 发现了一个叫做 Test Double 的东西
- 最近在看 google 软件测试之道
1. Test Double
- 概述
- 测试替身
- 背景
- 单元测试中, 总会对外界产生依赖
- 要么依赖外界的参数
- 要么依赖外界的服务
- 但是如果真的依赖起来了...
- 一传十十传百, 就得起一套环境
- 可我就想写个 单元测试 啊喂...
- 一传十十传百, 就得起一套环境
- 于是, 有了 测试替身...
- 不是 JoJo 的那个替身...
- Double 就是 替身的意思
- 单元测试中, 总会对外界产生依赖
- Test Double
- 概述
- 在测试中用来充数的对象
- 目的
- 减少依赖
- 方便测试
- 分类
- Dummy
- 名称
- 哑对象
- 本质
- 一个普通的对象
- 但是却不会被使用...
- 场景
- 通常用来做 参数列表 的填充
- 名称
- fake
- 名称
- 假对象
- 本质
- 确实是一个有逻辑的实现
- 但是这个实现仅仅为了完成测试, 所以会比较简陋
- 跟生产环境肯定没法比
- 场景
- 比如需要用 数据库 的时候,
- 我们可以用一个 fake, 连接到 redis 里取数据
- 名称
- stub
- 名称
- 桩对象
- 本质
- 没有逻辑
- 只有固定的返回值
- 作用域很小, 只有测试的地方...
- 场景
- 测支付的时候, 需要返回成功
- 名称
- spy
- 名称
- 间谍对象
- 本质
- 是一个 桩对象
- 但是多了一些 记录功能
- 场景
- 有个 模拟发邮件 的 spy
- 每次调用它, 就会返回成功
- 这个 spy 会记录你每次要发送的内容
- 可能是 调用参数 之类的
- 名称
- mock
- 名称
- 模仿对象
- 本质
- 预定义了一系列的调用返回
- 如果符合 预期, 就 正常返回
- 如果不符合 预期, 就会 报异常
- 感觉比 stab 要稍微复杂点...
- 简单的说, 就是一个 带断言 的 stub
- 然后你问我, 为啥不直接用 断言...
- 其实, 我觉得...也可以...
- 而且用 mock 的话, 测试会更加真实, 自然...
- 简单的说, 就是一个 带断言 的 stub
- 预定义了一系列的调用返回
- 场景
- 通常用来模拟 可能会触发异常, 的场景
这个用倒是用过, 可真的 一会半会 想不出来啥场景了...
ps
- 通常用来模拟 可能会触发异常, 的场景
- 名称
- Dummy
- 概述
- ref
- 浅析Mock,Fake和Stub在测试中的应用
- 一个相对靠谱的老哥
- ref 真的很全
- 一个相对靠谱的老哥
- TestDouble
- 这个是 Martin Fowler 的博客
- 就是写 重构, 分析模式 的老哥
- 这个是 Martin Fowler 的博客
- Test Double
- 这是另一本书 xUnit Patterns 对这些的讲解
- 浅析Mock,Fake和Stub在测试中的应用
- 后续
- 找了些 mock 的学习资料, 有空自己 补一补...
测试理论 - Test Double的更多相关文章
- Go项目的测试代码3(测试替身Test Double)
上一篇文章介绍了项目中测试代码的写法. Go项目的测试代码2(项目运用) 这里简单的共享一下测试替身. 当我们写测试代码的时候,经常遇到一个问题.跟别的模块或服务有依赖性,可是功能还没开发完.或是因为 ...
- 测试理论- the conten of test plan
1 testing objects 测试对象 2 testing scope 测试范围 3 testing the frame (?) 4 the environment 5 reason for t ...
- 测试理论--branch testing and boundary testing
1 branch testing 分支测试 测试代码的所有分支 2 boundary testing 测试 程序的限制条件
- 测试理论--web测试方法总结
一.输入框 1.字符型输入框: (1)字符型输入框:英文全角.英文半角.数字.空或者空格.特殊字符“~!@#¥%……&*?[]{}”特别要注意单引号和&符号.禁止直接输入特殊字符时,使 ...
- 测试理论03-svn-缺陷及报告-jira
回顾--用例设计方法 边界值(三个点,使用步骤) 判定表(适用,四个组成部分,规则,使用) 因果图(适用,四个符号,使用) 正交表(定义,特性,L_n(m^k),因素,水平,使用,工具allpairs ...
- App测试理论简介
一.App测试常见关注点 1.App的功能测试 功能测试都是我们首要测试的,只有功能实现了才算符合上线发布的最低标准.我们需要检测产品功能是否已实现.产品功能是否符合设计要求.产品功能是否有重复.产品 ...
- 测试理论-selenium的工作原理
- 【星云测试】Wings-让单元测试智能全自动生成
Wings-让单元测试智能全自动生成 前言 单元测试是保证软件质量非常有效的手段,无论是从测试理论早期介入测试的理念来看或是从单元测试不受UI影响可以高速批量验证的特性,所以业界所倡导的测试驱动开发, ...
- LINQ 函数的实战演练测试
1.首先定义一个图书类.专门存放图书的属性信息. 代码如下: //Book.cs using System; namespace LinqTest { public class Book { pu ...
随机推荐
- claim、claimsidentity、claimsprincipal
Claim表示一个声明单元,它用来组成ClaimsIdentity.ClaimsIdentity表示一个证件,例如身份证,身份证上面的名字表示一个Claim,身份证号也表示一个Claim,所有这些Cl ...
- UVA12325-注意提高效率的思路
题目大意:你有一个体积为N的箱子和两种数量无限的宝物.宝物1的体积为S1,价值为V1:宝物2的体积为S2,价值为V2.输入均为32位带符号的整数.你的任务是最多能装多少价值的宝物? 方法:其实也没 ...
- 安装Elasticsearch到Linux(源码)
运行环境 系统版本:CentOS Linux release 7.3.1611 (Core) 软件版本:Elasticsearch-7.1.0 硬件要求:最低2核4GB 安装过程 1.源码安装JDK ...
- 关于MySQL数据库中null的那些事
在mysql数据库中,null是一个经常出现的情况,关于mysql中的null,有哪些注意事项呢?下面简单总结归纳下,后续会不断补充. 1. is null 首先判断数据库中某一列的值是否为null, ...
- springBoot代码和依赖分开打包
目的: 1.分离代码和依赖(包括第三方的引入包) 2.分离配置文件到外部 3.修改/META-INF/MANIFEST.MF中加载依赖包的位置和启动类,包含第三方依赖jar包 先查看项目的结构 由于我 ...
- A - Wireless Network POJ - 2236-kuangbin带你飞
A - Wireless Network POJ - 2236 Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 50348 ...
- RYU安装教程
一.使用pip的形式安装RYU 1.首先检查ubuntu中是否存在pip,命令为 sudo pip3 --version 2.如果存在则使用默认版本8.1.1就行不必跟新,否则自己下载一个pip 3. ...
- Ubuntu16.04突然断网
配置文件: sudo gedit /etc/network/interfaces 重启网络: 1.sudo /etc/init.d/networking restart 2.sudo service ...
- Myeclipse连接Mysql数据库时报错:Error while performing database login with the pro driver:unable
driver template: Mysql connector/j(下拉框进行选择) driver name: 任意填,最好是数据库名称,方便查找 connection URL: jdbc:mysq ...
- javax.naming.NameNotFoundException: Name jdbc is not bound in this Context
这个错误的原因是没有项目使用到了Tomcat中配置的数据源(但是你本地没有配置),关于什么是JNDI看这篇文章就够了® 今天导入一个项目(比较老的),在本地运行时报错: Cannot resolve ...