谷歌的软件工程 读书笔记(十三)测试双打
文章插图
“测试双打test doubles”指的是对象和函数来代表一个实际的实现 。 就是我们常说的mock 。
常见的test double就是用一个简单的对象实现实际的功能 。 例如内存内数据库 。 测试double可以显著降低测试成本 , 加快测试速度 。
测试Double对软件开发的影响测试double引入复杂性需要作出权衡
- 可测试性
- 可应用性
- 保真性
基本概念接缝支持使用测试Double来使得代码可测试 。 依赖注入是一种常见的接缝 。 谷歌使用Guice和Dagger来做Java语言的依赖注入 。 而对于Python , JavaScript , 由于语言的动态性 , 依赖注入更容易实现 。
Mocking框架支持对对象进行模拟来实现测试Double
在谷歌 , Java使用Mockito , C++使用googlemock , Python使用unittest.mock
单元测试相关技术有三种主要的技术来支撑单元测试中的测试Doubles
- Faking 对API的简单实现
- Stubbing 本身不实现任何行为 , 直接返回需要的值
- 交互测试 交互测试验证一个被测试的函数是否被调用 , 调用了多少次等
真实实现虽然可以使用mocking和faking , 但是其实使用真实的实现也是一种选择 。
【谷歌的软件工程 读书笔记(十三)测试双打】在谷歌 , 随着使用mocking框架的时间推进 , 大家更倾向使用真实的实现来做测试 。
总结
- 用实际的实现有很多时候优于使用测试double
- 如果真实实现无法用于测试 , fake是一个很好的方式
- 过分使用stubbing会使得测试不稳定
- 交互测试应该尽可能避免 , 因为暴露了实现细节 , 它更不稳定和脆弱
推荐阅读
- 谷歌浏览器拟禁用第三方Cookies 遭英国反垄断调查
- 谷歌建立新AI系统 可开发甜品配方
- 鸿蒙获欧企力挺!华为的大时代将到来,谷歌身上重现诺基亚的影子
- 谷歌新款Nest Hub或能追踪睡眠 但外媒提出诸多疑问
- “全能神”开发谷歌应用APP传播邪教教义
- 运动计数开发项目的对抗赛:飞算全自动软件工程平台碾压传统模式
- 谷歌“跨年夜”Doodle带大家一起倒计时
- 谷歌推出新版Pixel 4a 5G:骁龙765G芯/卖3200元
- FTC委员称苹果、谷歌是移动游戏行业的“看门人”
- 员工|美国科技大公司中罕见成立工会,谷歌:会直接和员工谈