Skip to main content

common-test-driven-development

TDD 测试驱动开发技能,遵循红绿重构循环,先写测试再写实现(包装自 obra/superpowers@test-driven-development)

来源信息

仓库
bage2014/study
最近来源活动
2026年10月12日 13:34
检测到的 SKILL.md 语言
中文
星标
649
Forks
113

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
name
common-test-driven-development
description
TDD 测试驱动开发技能,遵循红绿重构循环,先写测试再写实现(包装自 obra/superpowers@test-driven-development)
trigger
用户提到 TDD、测试驱动、红绿重构、先写测试时
disable-when
原型代码或配置文件等不适用 TDD 的场景
category
common
tags
["tdd","test-driven","red-green-refactor","testing","best-practices"]
requires
["common-backend-unit-test","common-coding","common-systematic-debugging"]
# TDD 测试驱动开发技能 ## 功能描述 引导开发者遵循 TDD(Test-Driven Development)模式,按「红-绿-重构」循环开发,确保每个功能都经过测试验证。 ## 触发条件 - 用户提到 TDD、测试驱动、红绿重构时 - 用户要求"先写测试再写代码"时 - 开发前明确要遵循 TDD 流程时 ## 何时使用 - 新功能开发时 - Bug 修复时 - 代码重构时 - 行为变更时 ## 何时不使用 - 一次性原型代码(需人工确认) - 生成的代码 - 纯配置文件 ## 核心原则 ``` NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST ``` 没有失败测试就不写生产代码。先写代码再写测试 = 删除重来。 ## 核心功能 - **红绿重构循环**:严格遵循 RED → GREEN → REFACTOR - **失败测试先行**:强制在写实现前确认测试失败 - **验证清单**:每步都有验证点防止跳过 - **Bug 修复流程**:先写复现测试再修 - **红线警告**:识别自我欺骗的借口 ## 红绿重构循环详解 ### RED - 写失败测试 写一个最小测试,展示期望行为。 **好的测试:** - 一件事一个测试 - 清晰的测试名称(描述行为,不是方法名) - 用真实代码测试(非必要不用 mock) ### Verify RED - 确认失败 **必须执行,不能跳过。** ```bash # 运行单个测试,确认它失败 npm test path/to/test.test.ts # 或 mvn test -Dtest=ClassName#methodName ``` 检查:测试确实失败(不是语法错误),失败原因正确(功能缺失)。 ### GREEN - 写最小实现 写最简单的代码让测试通过。 - 只写够让当前测试通过的代码 - 不要加额外功能(YAGNI) - 不要重构其他代码 ### Verify GREEN - 确认通过 **必须执行。** ```bash # 运行完整测试套件,确认全部通过 npm test # 或 mvn test ``` 检查:目标测试通过 + 其他测试不被破坏。 ### REFACTOR - 清理重构 只在绿色状态下重构: - 消除重复 - 改善命名 - 提取辅助方法 重构后必须保持全部测试通过。 ## 好的测试特征 | 质量 | 好 | 坏 | |------|---|---| | 最小化 | 一件事,名字里有 "and" 就该拆分 | 一个测试验证多个行为 | | 清晰 | 名字描述期望行为 | `test1`, `test_retry` | | 展示意图 | 用测试说明 API 应该怎么用 | 用 mock 掩盖设计问题 | ## Bug 修复流程 1. 写一个失败测试复现 bug(RED) 2. 验证测试确实因为 bug 而失败(Verify RED) 3. 写最小修复代码(GREEN) 4. 测试通过(Verify GREEN) 5. 清理重构(REFACTOR) 6. 提交修复 + 测试(防止回归) **铁律:不写测试就不修 bug。** ## 红线警告 - 停下重来 如果发现自己在找这些借口,**删掉代码,回到测试优先:** | 借口 | 真相 | |------|------| | "太简单不用测" | 简单代码也会坏,测试只要 30 秒 | | "先写代码后补测" | 后写的测试永远通过,证明不了能抓 bug | | "手动测过了" | 手动测试无记录、不可重复、易漏边界 | | "删掉 X 小时太浪费" | 沉没成本谬误,删掉才是对的 | | "作为参考留着" | 你会忍不住适配它,这就是后写测试 | ## TDD 常见困境 | 问题 | 解法 | |------|------| | 不知道怎么测试 | 先写你期望的 API,先写断言,逐步补全 | | 测试太复杂 | 说明设计太复杂,简化接口 | | 必须 mock 所有东西 | 耦合太重,用依赖注入解耦 | | 测试 setup 巨大 | 提取测试工具类;还是复杂就简化设计 | ## 验证清单 完成前必须全部打勾: - [ ] 每个新方法/函数都有测试 - [ ] 每个测试实现前都看到过它失败 - [ ] 失败原因正确(功能缺失,不是拼写错) - [ ] 实现代码是让测试通过的最小代码 - [ ] 完整测试套件全部通过 - [ ] 输出干净(无错误、无警告) - [ ] 用真实代码测试(mock 仅在不可避免时用) - [ ] 边界条件和异常路径都覆盖 ## 输入参数 | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | feature | String | 是 | 要实现的功能描述 | | language | String | 否 | 编程语言 | | framework | String | 否 | 测试框架(Jest/Pytest/JUnit 等) | | scope | String | 否 | 作用域:unit/integration/e2e,默认 unit | ## 输出格式 ```json { "cycle": "RED", "testFile": "path/to/test.test.ts", "productionFile": "path/to/production.ts", "testCode": "测试代码", "productionCode": "生产代码", "verification": { "redVerified": true, "greenVerified": true, "refactorDone": false } } ``` ## 与现有 skill 的关系 - **common-backend-unit-test**:提供后端单元测试框架(JUnit/Mockito) - **common-coding**:提供编码规范指导 - **common-systematic-debugging**:bug 修复时两者配合使用 ## 参考来源 原始 skill:`obra/superpowers@test-driven-development` 来源仓库:https://github.com/obra/superpowers 安装命令:`npx skills add obra/superpowers@test-driven-development -y -g`
在 GitHub 查看