测试理论 - Test Double
-
概述
- 简述 test double
- mock, fake 之类的东西
- 简述 test double
-
背景
-
最近在看 google 软件测试之道
- 妈的 13 年的老书了
- 书里有提到 mock, fake, stub
- 刚好, 我又不太会
-
上网找相关的东西
- 发现了一个叫做 Test Double 的东西
-
1. Test Double
-
概述
- 测试替身
-
背景
-
单元测试中, 总会对外界产生依赖
- 要么依赖外界的参数
- 要么依赖外界的服务
-
但是如果真的依赖起来了...
- 一传十十传百, 就得起一套环境
- 可我就想写个 单元测试 啊喂...
- 一传十十传百, 就得起一套环境
-
于是, 有了 测试替身...
- 不是 JoJo 的那个替身...
- Double 就是 替身的意思
-
-
Test Double
-
概述
- 在测试中用来充数的对象
-
目的
- 减少依赖
- 方便测试
-
分类
-
Dummy
-
名称
- 哑对象
-
本质
- 一个普通的对象
- 但是却不会被使用...
-
场景
- 通常用来做 参数列表 的填充
-
-
fake
-
名称
- 假对象
-
本质
- 确实是一个有逻辑的实现
- 但是这个实现仅仅为了完成测试, 所以会比较简陋
- 跟生产环境肯定没法比
-
场景
- 比如需要用 数据库 的时候,
- 我们可以用一个 fake, 连接到 redis 里取数据
-
-
stub
-
名称
- 桩对象
-
本质
- 没有逻辑
- 只有固定的返回值
- 作用域很小, 只有测试的地方...
-
场景
- 测支付的时候, 需要返回成功
-
-
spy
-
名称
- 间谍对象
-
本质
- 是一个 桩对象
- 但是多了一些 记录功能
-
场景
- 有个 模拟发邮件 的 spy
- 每次调用它, 就会返回成功
- 这个 spy 会记录你每次要发送的内容
- 可能是 调用参数 之类的
-
-
mock
-
名称
- 模仿对象
-
本质
- 预定义了一系列的调用返回
- 如果符合 预期, 就 正常返回
- 如果不符合 预期, 就会 报异常
- 感觉比 stab 要稍微复杂点...
- 简单的说, 就是一个 带断言 的 stub
- 然后你问我, 为啥不直接用 断言...
- 其实, 我觉得...也可以...
- 而且用 mock 的话, 测试会更加真实, 自然...
- 简单的说, 就是一个 带断言 的 stub
- 预定义了一系列的调用返回
-
场景
- 通常用来模拟 可能会触发异常, 的场景
- 这个用倒是用过, 可真的 一会半会 想不出来啥场景了...
- 通常用来模拟 可能会触发异常, 的场景
-
-
-
ps
-
ref
-
- 一个相对靠谱的老哥
- ref 真的很全
- 一个相对靠谱的老哥
-
- 这个是 Martin Fowler 的博客
- 就是写 重构, 分析模式 的老哥
- 这个是 Martin Fowler 的博客
-
- 这是另一本书 xUnit Patterns 对这些的讲解
-
-
后续
- 找了些 mock 的学习资料, 有空自己 补一补...
尽量尝试解释清楚; 自己校对能力有限, 如果有错误欢迎指出