Superpowers 测试驱动开发入门:RED-GREEN-REFACTOR 循环从零跑通

发布时间:2026/8/28 9:55:44
Superpowers 测试驱动开发入门:RED-GREEN-REFACTOR 循环从零跑通 Superpowers 测试驱动开发入门RED-GREEN-REFACTOR 循环从零跑通【免费下载链接】superpowersAn agentic skills framework software development methodology that works.项目地址: https://gitcode.com/GitHub_Trending/su/superpowers你第一次给这个仓库提代码测试跑得全绿合入之后行为却是反的——因为那个测试从来没失败过。Superpowers 把测试驱动开发TDD当成硬规矩RED-GREEN-REFACTOR 三步循环先写测试再写代码。先写测试到底解决什么问题先写测试不是形式主义。测试是你先给代码下的判决什么算对、什么算错先写死在断言里断言就是那句我认定结果必须是这个。好比先定验收标准再施工房子盖完了才想应该有几间房验收就成了走过场。还有个更扎心的点一个从头到尾没见过失败的测试等于没存在过——你从没证明它抓得住 bug。用一个小例子走完 RED-GREEN-REFACTOR拿失败重试当例子。你想写个withRetries操作失败就再试最多三次三次后把错误抛出去。RED 阶段写一个先失败的测试做什么挑最小行为写断言。别做什么别给测试起名 test1也别一上来就 mock 三个依赖。test(gives up after the third try, async () { let calls 0; const op () { calls; if (calls 3) throw new Error(boom); }; await expect(withRetries(op)).rejects.toThrow(); expect(calls).toBe(3); });写完必须跑一遍看它真的失败而且失败原因是功能还没写不是拼写错误。这一步在项目里标着 MANDATORY不许跳。如果测试一次就通过那你在测已经存在的行为该改的是测试不是代码。GREEN 阶段只写够用的代码做什么写刚好让测试通过的代码写完就停。别做什么别加配置项别提前设计以后可能要指数退避。async function withRetries(fn) { for (let i 0; i 3; i) { try { return await fn(); } catch (e) { if (i 2) throw e; } } }再跑一遍这条绿了其他测试也还是绿的才算过了。REFACTOR 阶段趁绿整理做什么把魔法数字 3 提成MAX_ATTEMPTS这样的命名常量改名字抽辅助函数。别做什么不加任何新行为。判断标准只有一条——改完测试还是绿的任何时候都不能让它回红。到这里一个循环走完。接下来不是继续雕琢这段代码而是回 RED给下一个行为写新的失败测试。新手怎么写单元测试才算写对新手最常问单元测试到底怎么写项目里其实有标准答案浓缩成四条对照测试名要能当人话读。好rejects empty email。坏test1或者名字里塞两个 and——名字里出现和就该拆成两个测试。断真行为别断 mock。好调用真实函数断言返回值。坏mock 三个依赖最后断言mock 被调了 3 次——那测的是假人不是你的代码。期望值要手写。好expect(result).toBe(tag:urgent)。坏用被测代码自己算期望值——两边用同一个函数算测试永远绿等于没写。测试写不出来是设计的问题。如果一个测试逼你 mock 全家桶、铺一堆 setup 代码先怀疑接口太绕把它拆简单而不是加更多桩。交之前自问两句这个测试失败过吗失败原因是缺功能还是我的手滑答不上任何一句说明它没守住任何一条行为。项目里先看什么、先跑哪条命令不用装新东西仓库自带全套skills/test-driven-development/SKILL.md这套规矩的原文还有一份该推倒重来的红旗清单动手前通读一遍skills/test-driven-development/writing-good-tests.md测试怎么命名、哪些断言是假绿细节都在这里tests/claude-code/run-skill-tests.sh 和 tests/claude-code/test-helpers.sh仓库自己的测试怎么跑、断言辅助函数长什么样跑一条命令看看项目自己的测试是怎么转起来的cd tests/claude-code ./run-skill-tests.sh下一步就一件事打开 SKILL.md 读一遍红线然后挑一个你手里的小功能先把那个注定失败的测试写出来。【免费下载链接】superpowersAn agentic skills framework software development methodology that works.项目地址: https://gitcode.com/GitHub_Trending/su/superpowers创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考