用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/ZhangXin8069/configure --skill tdd命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
| name | tdd |
| description | 当用户要求 TDD、测试驱动开发、先写失败测试、红绿循环或测试先行,或在实现新功能/修复 bug 时 明确要求先测试后编码时使用。 |
| metadata | {"openclaw":{"emoji":"🧱"}} |
遵循当前目录 AGENTS.md「技能执行公共契约」;仅按需读取技能正文与 reference。
先写失败测试 → 看它失败 → 写最小代码 → 看它通过 → 重构保持全绿,逐功能循环。 核心原则:没看到测试失败,就无法知道测试是否测对了东西。
NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST——
先写代码再写测试?删除重来。无例外:不留作"参考"、不"边写测试边适配"、
不看它;删除就是删除。pytest、npm test <file>),在终端摘要中说明;test('重试失败操作3次'));<测试命令> 路径/测试文件
确认:测试失败(非报错)、失败信息符合预期、失败原因 = 特性缺失(非拼写/环境);
<测试命令> 路径/测试文件
确认:测试通过、其他测试仍通过、输出干净(无错误/警告);
逐项核对:每函数有测试 / 看过每个测试失败 / 失败原因符合预期 / 写了最小实现 / 全部通过 / 输出干净 / 边界与错误已覆盖。 缺任何一项 = 跳过了 TDD,从头开始。
✓ tdd 完成
目标: <功能/bug 描述>
循环: <N 个红绿循环>
RED: <每个循环的失败测试 + 预期失败原因>
GREEN: <最小实现要点(文件:行号)>
REFACTOR: <清理项,无则省略>
验证: <全绿 + 其他测试无回归 + 输出干净>
豁免: <用户批准的豁免项,无则省略>
遗留: <未覆盖项,无则省略>
| 借口 | 现实 |
|---|---|
| "太简单不用测" | 简单代码也会坏;测试只需 30 秒 |
| "之后再测" | 后写测试立即通过——什么也证明不了,可能测错东西/测实现/漏掉边角 |
| "先测后测目标一样(精神不是仪式)" | 后测回答"这代码做了什么";先测回答"这代码该做什么" |
| "手动测过了" | 手动测试无记录、不可复现、压力下易漏;自动化每次跑法一致 |
| "删掉 X 小时的工作太浪费" | 沉没成本谬误;保留无法信任的代码才是浪费 |
| "留作参考,之后先写测试" | 你会去适配它——那就是后测。删除就是删除 |
| "先探索一下" | 可以;探索产物扔掉,用 TDD 从头开始 |
| "TDD 拖慢进度" | TDD 才是务实路径:提交前抓 bug、防回归、可无惧重构 |
| "已有代码没有测试" | 那正是你改进它的机会,给既有代码补测试 |
以上任一出现 = 删除代码,用 TDD 从头开始。
| 场景 | 处理 |
|---|---|
| 不知道怎么写测试 | 写期望 API;先写断言;问用户 |
| 测试太复杂 | 设计太复杂——简化接口 |
| 什么都要 mock | 代码耦合过重——依赖注入 |
| 测试基建庞大 | 提取辅助;仍复杂则简化设计 |
| 测试通过但没看过它失败 | 回退实现,重走 RED→验证失败→GREEN |
| 修 bug 无测试 | 先写复现失败测试,再红绿循环 |
| 用户催促跳过测试 | 说明铁律与理由,申请明确豁免才可跳过 |
| 无测试框架 | 纯 shell 项目用 bash -n + 最小复现脚本走红绿(先写脚本断言) |