← ClaudeAtlas

test-driven-developmentlisted

在实现任何功能或修复 bug 时使用,在编写实现代码之前
xjxj71/ai-token-usage-statistics · ★ 0 · Testing & QA · score 65
Install: claude install-skill xjxj71/ai-token-usage-statistics
# 测试驱动开发(TDD) ## 概述 先写测试。看它失败。写最少的代码让它通过。 **核心原则:** 如果你没有看到测试失败,你就不知道它是否测试了正确的东西。 **违反规则的字面意思就是违反规则的精神。** ## 何时使用 **始终使用:** - 新功能 - Bug 修复 - 重构 - 行为变更 **例外(需询问你的人类伙伴):** - 一次性原型 - 生成的代码 - 配置文件 想着"就这一次跳过 TDD"?停下来。那是在给自己找借口。 ## 铁律 ``` 没有失败的测试,就不写生产代码 ``` 先写了代码再写测试?删掉它。从头来过。 **没有例外:** - 不要保留作为"参考" - 不要在写测试时"改编"它 - 不要看它 - 删除就是删除 从测试出发,重新实现。句号。 ## 红-绿-重构 ```dot digraph tdd_cycle { rankdir=LR; red [label="红灯\n编写失败的测试", shape=box, style=filled, fillcolor="#ffcccc"]; verify_red [label="验证正确失败", shape=diamond]; green [label="绿灯\n最少代码", shape=box, style=filled, fillcolor="#ccffcc"]; verify_green [label="验证通过\n全部绿灯", shape=diamond]; refactor [label="重构\n清理代码", shape=box, style=filled, fillcolor="#ccccff"]; next [label="下一个", shape=ellipse]; red -> verify_red; verify_red -> green [label="是"]; verify_red -> red [label="错误的\n失败"]; green -> verify_green; verify_green -> refactor [label="是"]; verify_green -> green [label="否"]; refactor -> verify_green [label="保持\n绿灯"]; verify_green -> next; next -> red; } ``` ### 红灯 - 编写失败的测试 写一个最小的测试来展示期望行为。 <Good> ```typescript test('retries failed operations 3 times', async () => { let attempts = 0; const operation = () => { attempts++; if (attempts < 3) throw new Error('fail'); return 'success'; }; const result = await retryOperation(operation); expect(result).toBe('success'); expect(attempts).toBe(3); }); ``` 名称清晰,测试真实行为,只测一件事 </Good> <Bad> ```t