05 06 07|TDD中的测试

TDD 学习笔记 | 极客时间 | 徐昊·TDD 项目实战 70 讲

测试的四个阶段

  • 初始化
  • 执行测试
  • 验证结果
  • 复原

状态验证与行为验证

状态验证

简单的理解:一波操作后验证返回结果是否和预期一样

行为验证

  • 简单理解:验证一波操作是否严格按预期的顺序执行,不管结果
  • 对 TDD 用处不大
  • 大多数情况下会丧失测试的有效性

Martin Folwer 《Mocks Aren’t Stubs》,对于不同的测试替身给予了充分的说明

TDD 中的单元测试

  • 在 TDD 的语境下,“单元测试”指的是能提供快速反馈的低成本的研发测试(Developer Test)
  • 将所有直接耦合都视为坏味道的设计取向,会将功能需求的上下文打散到一组细碎的对象群落中,增加理解的难度。最终滑向过度设计(Over Design)的深渊。
  • 坏味道通常源自过高认知负载(Cognitive Load)或不易修改,俗称“看不懂改不动”。比如,坏味道过长的方法(Long Method)不是以绝对代码长度来衡量的,而是以“是否超出认知负载或难以改变其中的行为”来衡量的。而将功能上下文切得过于细碎,也会增加认知负载。因而不能单纯地认为,这种风格就一定是好的设计

❗️ 原来如此

在测试驱动开发中,从来没有强调必须是“单元测试”。反而在大多数情况下,都是针对不同单元粒度的功能测试。并通过这一系列不同单元粒度的功能测试,驱动软件的开发

两位超级大佬说的

  • 通过构造恰当粒度的黑盒功能测试驱动开发(—— Kent Beck)
  • TDD 社区所谓的单元测试到底是:能提供快速反馈的低成本的研发测试(—— Martin Folwer)
  • Martin Fowler 还建议将 TDD 中的测试叫作极限单元测试(Xunit Testing),以区别于行业中的叫法
comments powered by Disqus