test-driven-development

工程开发 社区 @obra
信任分
88/100
兼容 Agent
1
速查档案 只列事实:领域、Agent、信任分、作者、原文章节。装与不装请看下方作者解读。
领域
工程开发
兼容 Agent
Claude Code
信任分
88 / 100 · 社区维护
作者 / 版本 / 许可
@obra · 未声明 license
安装命令数
1 条

需要注意: 未限定 allowed-tools,默认拥有全部工具权限。

想读作者英文原文? ↓ 滚到正文区切换 · 在 GitHub 查看 ↗

解读由编辑根据原文凝练而成,命令、链接、术语均与作者原文一致;想看完整论述请切到右侧

test-driven-development 是 tdd 的「全篇」展开:完整的 Red-Green-Refactor 状态机、good test / bad test 对照例、"violation = rationalization" 的 red flags 与 your human partner signals 清单。铁律不变:「NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST」——先测后码,看到测试以「正确的方式失败」才能进下一步。

设计思路

作者把 TDD 当成认知防御:「如果你没看到测试 fail 过,你不知道它测的是不是对的东西。」第一次 RED 必须失败(且为「正确原因」失败)——错原因 fail 要回去重写测试。Code 写得早了?删掉,从测试重新长出实现。"keep it as reference"、"adapt it while writing tests"、"look at it"——通通禁止。Delete means delete.

何时该用 / 何时例外

Always:新功能、bug 修复、refactor、行为变更。例外(必须问 your human partner):抛弃式 prototype / 生成代码 / 配置文件。如果你脑里冒出「这次就跳过 TDD」——那就是 rationalization,停下。

Red-Green-Refactor 状态机

RED 写失败测试Verify fails correctly(失败原因对吗?错就回 RED 重写)→ GREEN 最小代码让它过Verify passes / All green(不过就回 GREEN 修最小集)→ REFACTOR 清理(保持绿)→ Next。每一步都有验证关卡,不是单向滑梯。

Good test vs Bad test

  • Goodtest('retries failed operations 3 times', ...) —— 名字描述能力、行为级断言、计数验证一件事;
  • Badtest('retry works', ...)mock.fn().mockRejectedValueOnce(...).mockResolvedValueOnce('success') —— 名模糊、整段在测 mock,没人在乎真 behavior。

Red Flags - STOP and Start Over

出现这些就停下来:你在没失败测试的情况下写 prod 代码 / 你 grep 了一段已存在实现去「适配」它写测试 / 你正打算把刚写的测试改成「能过」。这些信号下,删码 / 删测重新长,不要修补。

适合谁

  • 长期维护、refactor 频繁的核心代码
  • 团队希望让测试集成为「行为说明书」
  • 给 AI agent 落地的纪律:subagent 写代码时强制 RED 先于 GREEN

何时不要用

  • 一次性 prototype 或 throwaway 脚本(与 tdd 同例外)
  • 大规模生成代码(声明式配置、protobuf 生成等)

配套

tdd(紧凑版纪律)、subagent-driven-development(subagent 内部强制 RED→GREEN)、verification-before-completion(落地前自检)、debugging-with-humility(修 bug 时的语言纪律)、systematic-debugging(修复前先证据)。