- 开发减速测试代码量远超生产代码(例如3倍),导致开发速度下降 20-50%。
- 测试脆弱测试与实现细节过度耦合,尤其是在大量使用
Mock
的情况下。代码一重构,大量测试就会失败,这违背了 TDD “保护重构”的核心承诺。 - 维护噩梦一段时间后,开发者(甚至是原作者)回头看测试,完全不明白其意图。当测试失败时,不知道是 Bug 还是实现已变更。
- ATDD/BDD 陷阱像 FitNesse, Cucumber 这类工具编写的测试,客户很少真正关心,且运行缓慢,经常处于失败状态(“一片红”),最终沦为团队互相指责的根源。
- 核心观点:这些痛苦的根源在于,我们错误地将 TDD 的“单元”理解为“类/方法”,并开始为实现细节编写测试,而不是为软件行为。