谷歌的软件工程 读书笔记(十三)测试双打


谷歌的软件工程 读书笔记(十三)测试双打文章插图
“测试双打test doubles”指的是对象和函数来代表一个实际的实现 。 就是我们常说的mock 。
常见的test double就是用一个简单的对象实现实际的功能 。 例如内存内数据库 。 测试double可以显著降低测试成本 , 加快测试速度 。
测试Double对软件开发的影响测试double引入复杂性需要作出权衡

  • 可测试性
  • 可应用性
  • 保真性
谷歌使用测试Doubles在谷歌 , 避免过度使用Mocking框架 , 这些Mocking的框架使得测试Double非常容易编写 , 但是也会导致很难发现的问题 。
基本概念接缝支持使用测试Double来使得代码可测试 。 依赖注入是一种常见的接缝 。 谷歌使用Guice和Dagger来做Java语言的依赖注入 。 而对于Python , JavaScript , 由于语言的动态性 , 依赖注入更容易实现 。
Mocking框架支持对对象进行模拟来实现测试Double
在谷歌 , Java使用Mockito , C++使用googlemock , Python使用unittest.mock
单元测试相关技术有三种主要的技术来支撑单元测试中的测试Doubles
  1. Faking 对API的简单实现
  2. Stubbing 本身不实现任何行为 , 直接返回需要的值
  3. 交互测试 交互测试验证一个被测试的函数是否被调用 , 调用了多少次等
Stubbing和交互测试通常都可以由Mocking框架来做 。
真实实现虽然可以使用mocking和faking , 但是其实使用真实的实现也是一种选择 。
【谷歌的软件工程 读书笔记(十三)测试双打】在谷歌 , 随着使用mocking框架的时间推进 , 大家更倾向使用真实的实现来做测试 。
总结
  • 用实际的实现有很多时候优于使用测试double
  • 如果真实实现无法用于测试 , fake是一个很好的方式
  • 过分使用stubbing会使得测试不稳定
  • 交互测试应该尽可能避免 , 因为暴露了实现细节 , 它更不稳定和脆弱


    推荐阅读