知识卡片
测试先行设计
内容
先写测试会迫使接口先被使用,再被实现,从而站在调用者角度设计行为。失败测试给编码提供具体理由,也约束过度设计。发散:TDD 的价值不止是覆盖率,更是把设计反馈提前到第一行实现之前。
参考来源
- 位置:第5章《敏捷反馈》"20 先用它再实现它"(源文件:_epub-src/OEBPS/text00000.html)
- 结论依据:原文用井字棋游戏从设想复杂的Player类最终简化为布尔属性FirstPlayerPegIsX为例,说明测试先行会迫使你站在使用者角度决定接口、并遵循YAGNI原则消除不必要的类,明确"先写测试,你就会站在代码用户的角度来思考,而不仅仅是一个单纯的实现者",直接支持卡片结论。
- 原始内容:"先写测试,你就会站在代码用户的角度来思考,而不仅仅是一个单纯的实现者。这样做是有很大区别的,你会发现因为你自己要使用它们,所以能设计一个更有用、更一致的接口。除此之外,先写测试有助于消除过度复杂的设计,让你可以专注于真正需要完成的工作。……你看,我们是以Player类开始,最后却只使用了简单的布尔类型属性。这是如何做到的呢?这种简化就是在编写代码之前让测试优先实现的。"