tdd-workflow
完整 TDD 工作流,含反合理化表。
评分明细
适用场景
tdd-workflow 快速入门
让 AI 写代码时强制先写测试用例,而不是先把功能糊出来再补测试。
这是什么?解决什么问题?
tdd-workflow 是 affaan-m/everything-claude-code 仓库下的一个 Skill,核心思路是把”测试驱动开发(TDD)“的方法论打包成 AI 可读的指导文档,让 Claude Code、Cursor 等 AI 编程助手在帮你写代码时,默认走”红-绿-重构”流程,而不是”先写实现再补测试”。
传统的 AI 编程有一个常见问题:你让它”写一个用户注册接口”,它会直接吐出 def register(...) 的实现代码,等你提醒”加个测试”它才慢吞吞地补。这种”实现先行”的习惯,容易让 AI 写出看起来能跑、但边界条件没考虑到的代码。
TDD(测试驱动开发)反过来,流程是:
- 红(Red):先写一个会失败的测试用例。
- 绿(Green):写最少代码让测试通过。
- 重构(Refactor):在测试保护下,优化代码结构。
这个 Skill 包含一个非常实用的”反合理化表”(Anti-rationalization Table),列举了程序员(以及 AI)常见的”今天就跳过 TDD 吧”的借口,以及对应的反驳话术,比如”测试太简单了不用写""就一行改动而已”等等。
它适合的场景:团队想把 TDD 文化推到 AI 编程流中、Code Review 时希望 AI 写出的 PR 自带测试、对 AI 写出的代码质量有更高要求。
准备工作
这个 Skill 不需要额外安装二进制,只需要一个支持 Skill 加载的 AI 编程助手,以及你的项目里已经配置好了测试框架(比如 Python 的 pytest、JavaScript 的 Jest、Go 的 testing 包)。
Clone 仓库:
git clone https://github.com/affaan-m/everything-claude-code.git
把 tdd-workflow 这个 Skill 加载到 AI 助手:
ln -s everything-claude-code/skills/tdd-workflow ~/.claude/skills/tdd-workflow
3 步快速上手
第 1 步:安装 Skill
按上面的命令软链完成后,重启 AI 助手,这个 Skill 就会生效。
第 2 步:验证安装
向 AI 发送测试请求:
“请按 tdd-workflow 的流程,帮我实现一个
add(a, b)函数,先写测试再写实现。”
如果 AI 输出的第一步是 pytest 测试用例(故意让它失败),第二步才是 def add(a, b): return a + b,第三步还会问你”要不要重构”,说明 Skill 加载成功。
第 3 步:用 Skill 跑第一个任务
假设你的项目是 Python + pytest,先新建一个测试文件 tests/test_calculator.py:
def test_add_two_positive_numbers():
assert add(2, 3) == 5
def test_add_negative_numbers():
assert add(-1, -1) == -2
跑一下,会得到 ModuleNotFoundError: No module named 'calculator',这正是”红”的状态。
让 AI 助手按 tdd-workflow 写实现:
# calculator.py
def add(a, b):
return a + b
再跑 pytest,两条用例都通过,这就是”绿”。
最后让 AI 帮忙看看有没有可以重构的:函数已经足够简单,无需重构。整个过程跑完,你不仅得到了一个 add 函数,还有两条永远会跑的保护性测试。
常见踩坑
- 测试一上来就写”能通过的”:TDD 要求测试先写、且必须先失败。如果一开始测试就过了,说明测试本身没意义。
- 测试覆盖不到边界条件:很多 AI 写测试只覆盖”正常输入”,不去想空值、负数、None、超长字符串。Skill 里的反合理化表专门有一条叫”happy path 够了”。
- 跳过重构环节:TDD 第三步”重构”经常被偷懒跳过,导致代码长期欠下技术债。
- 在已经写好的实现上”补 TDD”:这本质上不是 TDD,而是”测试覆盖”。Skill 强调 TDD 必须是测试先行的。
- 把单元测试和集成测试混在一起:TDD 关注单元测试,集成测试应该单独跑,否则一个慢测试卡住整个反馈循环。
- 不跑测试就提交:哪怕 TDD 流程走完了,没跑通就 push,等于把隐患推给同事。
初级用法
用法 1:为已有函数补 TDD 化。把现有代码贴给 AI,让它”先帮我写测试用例覆盖这个函数的所有分支”,然后根据测试反向重构实现。
用法 2:做新需求时让 AI 全程 TDD。告诉 AI”我需要 X 功能,请按 tdd-workflow 走完整流程”,AI 会自动按 红-绿-重构 三步输出。
用法 3:用反合理化表自我审查。当你想偷懒跳过 TDD 时,把”反合理化表”调出来读一遍,里面列了 20+ 常见借口,几乎每条都能戳中。
高级玩法
玩法 1:测试覆盖率门禁。在 CI 里加 pytest --cov=src --cov-fail-under=80,覆盖率不到 80% 直接拒绝合并。这个 Skill 建议覆盖率目标 ≥ 80%。
玩法 2:Mutation Testing 验证测试质量。用 mutmut(Python)或 Stryker(JS)等变异测试工具,故意把代码改坏看测试能不能抓到。比单纯看覆盖率更能反映测试有效性。
玩法 3:和 verification-before-completion 联动。tdd-workflow 关注”开发前”,verification-before-completion(也是 Obra/superpowers 下的 Skill)关注”完成后”,两个 Skill 配合形成闭环。
小技巧
- 测试命名要”行为驱动”。
test_add_two_numbers比test_add_01更清晰,失败时一眼能看出哪个场景挂了。 - 一个测试一个断言。初期可以宽容,但复杂的测试要拆成多个,失败时定位更快。
- 先写最简实现,再迭代。哪怕
def add(a, b): return 0也能让测试”通过一半”,这种”故意保留失败”是 TDD 的核心节奏。 - 不要 mock 你不拥有的东西。Mock 外部 API(网络、数据库)要谨慎,过度 mock 会让测试变成”自欺欺人”。
- 保存 RED 阶段的失败日志。提交 PR 时,把”先红再绿”的 git diff 一起贴出来,Code Reviewer 容易信服。
常见问题 FAQ
Q1: 这个 Skill 跟 tdd-workflow 有什么关系?必须装吗?
A: Skill 是给 AI Agent 用的”技能包”,能告诉 Agent 怎么按特定规范工作。不是必须装——如果你的项目规模小、要求不高,不装也能用。但装上能让 Agent 输出的质量更高、更符合最佳实践,推荐装。
Q2: 这个 Skill 适合哪些 AI Agent?Cursor?Claude Code?其他?
A: tdd-workflow 来自 community,主要面向支持 Skill 机制的 Agent。常见兼容 Agent 包括 Claude Code、Cursor、OpenCode、Windsurf 等。具体兼容性请查 Skill 官方文档。
Q3: 装了这个 Skill 后,会拖慢 Agent 响应吗?
A: 会的——Skill 通常会增加 prompt 长度,导致响应变慢、token 消耗增加。但质量提升明显。建议:1) 只装项目必需的 Skill;2) 用 Skill 启动/加载/卸载机制按需加载;3) 定期清理不用的 Skill。
Q4: 怎么验证 Skill 装对了?
A: 在 Agent 中输入”列出已加载的 Skill”或类似命令。如果 Skill 出现在列表里,说明装对了。然后用 Skill 跑一个相关任务,看输出是否符合 Skill 规范。
Q5: 这个 Skill 有许可证吗?能商用吗?
A: 取决于 tdd-workflow 的许可证。常见许可证包括 MIT(完全自由)、Apache-2.0(自由但有专利条款)、源可用(可看不能用)、GPL(强开源)。商用前请查仓库 LICENSE 文件。
参考链接
- tdd-workflow 仓库:https://github.com/affaan-m/everything-claude-code
- tdd-workflow Skill 路径:https://github.com/affaan-m/everything-claude-code/tree/main/skills/tdd-workflow
- pytest 官方文档:https://docs.pytest.org/
- Kent Beck《Test-Driven Development by Example》:经典 TDD 入门书
- 反合理化表出处:https://github.com/affaan-m/everything-claude-code/blob/main/skills/tdd-workflow/anti-rationalization.md
本文基于官方文档和公开资料整理,AI辅助生成,MagicNetWorld 尚未完成独立实测。如有错误或过时信息,请通过 contact@magicnetworld.com 反馈。
tdd-workflow Skill 多维度简评
类别:工程方法 来源:affaanm/everything-claude-code 定位:TDD 工作流强化:红→绿→重构循环,测试命名规范。
注意:本文基于官方文档和公开资料整理,未经过 MagicNetWorld 实测。
一、核心定位与价值
TDD(测试驱动开发)是 Anthropic 官方推荐的 Claude Code 工作流之一。tdd-workflow Skill 将 Red-Green-Refactor 循环固化为 Agent 可执行的标准化流程,解决 AI Agent 在编码时”先写实现再补测试”的天然倾向。
核心价值:强制 Agent 遵循红→绿→重构的 TDD 循环,先写失败的测试,再写最小实现使其通过,最后重构优化。
二、核心能力清单
| 能力 | 说明 |
|---|---|
| Red 阶段 | 先编写测试,确认测试在无实现时失败 |
| Green 阶段 | 编写最小代码使测试通过,不引入未测试的功能 |
| Refactor 阶段 | 在全部测试通过后重构代码,消除重复,提升可读性 |
| 测试金字塔 | 引导按单元测试→集成测试→E2E 测试的比例分布 |
| AAA 模式 | Arrange(准备)→ Act(执行)→ Assert(断言)的测试结构 |
| Given-When-Then | BDD 风格的测试描述格式 |
三、为什么 AI Agent 需要 TDD Skill
AI Agent 在编码时有三个天然倾向,需要通过 Skill 纠正:
- 实现优先:Agent 倾向于先写完整实现,再补测试,这与 TDD 的”测试优先”相反
- Happy Path 偏向:Agent 默认只考虑正常流程,忽略边缘情况
- 上下文污染:在单一会话中同时写测试和实现时,实现逻辑会”泄露”到测试中
tdd-workflow Skill 通过以下方式解决这些问题:
- 强制测试先行(无测试 = 无实现)
- 明确要求包含边界测试(空值、极端值、异常输入)
- 使用子 Agent 隔离测试编写和实现编写阶段
四、TDD Red-Green-Refactor 循环
🔴 RED → 先写一个失败的测试
🟢 GREEN → 写最小代码让测试通过
🔵 REFACTOR → 在测试保护下重构代码
每个循环的核心原则:
- Red:测试必须在对应用功能不存在时失败(验证测试的有效性)
- Green:只写刚好通过测试的代码,不引入任何额外功能
- Refactor:保持测试全绿的前提下,改进代码结构和可读性
五、安装与配置
# npx 安装
npx skills add affaanm/everything-claude-code --skill tdd-workflow
也可以在 CLAUDE.md 中添加 TDD 相关规则:
# CLAUDE.md
skills:
- tdd-workflow
六、总结
tdd-workflow 将 TDD 从”开发者自律”变为”Agent 强制流程”。对于重视代码质量和测试覆盖率的项目,它是确保 AI 生成代码可靠性的关键工具。
适用人群:重视测试的工程师、需要 AI 辅助编写测试的团队、所有希望提升代码质量的开发者。
参考资料
快速安装
git clone https://github.com/affaan-m/everything-claude-code.git ln -s everything-claude-code/skills/tdd-workflow ~/.claude/skills/tdd-workflow