方法

TDD

测试驱动开发

先写测试。看它失败。写让它通过的最简代码。重构。重复。

最近审阅: 2026-05-24 审阅人Kevin Riedl wiki ↗

TDD 是一种纪律,不是方法论。循环是:红(写一个会失败的测试)、绿(写让它通过的最简代码)、Refactor(在不破坏测试的前提下清理)。严格执行能产生高测试覆盖率,以及一种「反过度工程」的强制力。

多数团队嘴上做 TDD、实际并不做的原因:当下感觉更慢。它的复利收益(Refactor 安全、回归保护、推动更小单元的设计压力)要数月之后才显现。等到那时,团队早就停止「先写测试」,并说服自己「反正没什么不同」。

Wavect 在合适的地方用 TDD:与「钱」相关的集成测试、面向客户的契约测试、复杂逻辑的单元测试。我们不为 Getter / Setter 写测试。把「覆盖率」当目标的指标,是用来被绕过的。

// FAQ

常见问题

常见问题

因为当下感觉更慢。红 / 绿 / Refactor 循环要数月之后才显出复利收益,多数团队还没看到收益就放弃了,然后自我说服「反正没什么不同」。坚持下来的团队,Refactor 安全感与回归保护是真实可量化的。
不是。把覆盖率当目标,团队会写测试覆盖 Getter / Setter、写永远会通过的废测试,数字漂亮但保护力为零。值得测试的是钱相关的集成、面向客户的契约、复杂逻辑分支。覆盖率是结果指标,不是目标指标。
原型与 Spike:目标是回答「这件事可行吗」,写完就要扔的代码不值得做先写测试。一旦确认方向、决定保留代码,再补关键路径的测试。把 TDD 用在 Spike 上,是在为「将要被删掉的代码」交保护费。