关于 test-driven-development
引导编码 Agent 按测试驱动开发流程工作:先编写并确认失败测试,再实现最小代码、重构并提交。适用于需要测试验证行为且便于审查的渐进式代码修改。
主要功能
- 01RED-GREEN-REFACTOR 循环
- 02确认测试因预期原因失败
- 03实现通过测试的最少代码
- 04保持测试通过并重构
- 05每轮迭代后提交
适用场景
- 01开发新函数或模块
- 02用失败测试复现缺陷
- 03在重构前后检查测试
- 04进行小型且易审查的代码修改
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ itallstartedwithaidea/ agent-skills --skill test-driven-development安装后在 Claude Code 中输入/test-driven-development确认已加载。
详细介绍
测试驱动开发
Agent Skills™ 的一部分,由 googleadsagent.ai™ 提供
描述
测试驱动开发要求 Agent 对其生成的每项代码更改都遵循 RED-GREEN-REFACTOR 流程。Agent 先编写一个失败的测试,确认测试失败,再编写通过测试所需的最少代码,确认测试通过,随后重构代码,最后提交。任何生产代码都必须有对应的测试作为创建依据。
这项技能可消除最常见的 Agent 反模式:生成大段未经测试、看似正确,却会在边缘情况下悄然出错的代码。通过强制 Agent 执行 TDD 循环,每一行生产代码都有特定的测试断言作为依据。最终得到的代码库中,测试覆盖率不再是事后考虑的事项,而是一项结构性保障。
该循环与版本控制直接集成。每次 RED-GREEN-REFACTOR 迭代都会生成一个原子提交,从而留下可供审查的设计决策记录。重构阶段是必不可少的——在进入下一个功能增量之前,Agent 必须评估命名、重复代码和结构清晰度。
使用场景
- 编写任何新函数、方法或模块
- 修复 Bug(先编写能复现该 Bug 的测试)
- 重构现有代码(确保重构前后测试均通过)
- 用户提出“ TDD ”、“test-first”或“red-green-refactor”要求
- 构建 API、数据转换或业务逻辑
- 需要确信更改不会引入回归问题
工作原理
graph LR
R[RED: Write Failing Test] --> G[GREEN: Minimal Code to Pass]
G --> RF[REFACTOR: Clean Up]
RF --> C[COMMIT: Atomic Commit]
C --> R
style R fill:#e74c3c,color:#fff
style G fill:#2ecc71,color:#fff
style RF fill:#3498db,color:#fff
style C fill:#95a5a6,color:#fff
RED:编写一个描述下一个小型行为增量的测试。运行测试,并确认它因预期原因而失败——不是语法错误或导入失败,而是真正的断言失败。GREEN:编写能让测试通过的最简单生产代码。不要急于泛化。REFACTOR:改进命名、提取重复代码、简化控制流。所有测试都必须继续通过。COMMIT:暂存并提交,提交说明中注明新增的行为。
实现
# RED: Write the failing test first
def test_calculate_discount_applies_ten_percent_for_orders_over_100():
order = Order(items=[Item(price=150.00)])
result = calculate_discount(order)
assert result == 135.00 # 10% off
# Run: pytest => FAIL (calculate_discount not defined)
# GREEN: Minimal implementation
def calculate_discount(order):
total = sum(item.price for item in order.items)
if total > 100:
return total * 0.9
return total
# Run: pytest => PASS
# REFACTOR: Extract magic numbers
DISCOUNT_THRESHOLD = 100
DISCOUNT_RATE = 0.10
def calculate_discount(order):
total = sum(item.price for item in order.items)
if total > DISCOUNT_THRESHOLD:
return total * (1 - DISCOUNT_RATE)
return total
# Run: pytest => PASS
# git commit -m "feat: apply 10% discount for orders over $100"
应避免的反模式
| 反模式 | 失败原因 |
|---|---|
| 先写代码再写测试 | 测试验证的是假设,而非行为 |
| 测试实现细节 | 脆弱的测试会因有效重构而失败 |
| 跳过 RED 步骤 | 无法证明测试确实能够失败 |
| GREEN 步骤跨度过大 | 无法追溯哪个测试驱动了哪段代码 |
| 跳过 REFACTOR | 技术债会悄然累积 |
最佳实践
- 每个 RED-GREEN-REFACTOR 循环应在 5 分钟内完成
- 如果 GREEN 需要超过 10 行代码,说明测试目标过于宏大,应将其拆分
- 将测试命名为行为规范:
test_<action>_<condition>_<outcome> - 每次 REFACTOR 后都运行完整测试套件,而不只是新测试
- 每个完整循环后都提交,以保留设计演进记录
- 仅在架构边界使用测试替身(模拟对象、桩对象)
平台兼容性
| 平台 | 支持情况 | 备注 |
|---|---|---|
| Cursor | 完全支持 | Shell 工具可内联运行测试 |
| VS Code | 完全支持 | 集成终端可运行测试 |
| Windsurf | 完全支持 | Cascade 可执行测试命令 |
| Claude Code | 完全支持 | 可直接通过 Shell 访问 pytest/jest |
| Cline | 完全支持 | 可配置测试运行器 |
| aider | 部分支持 | 需要手动确认测试结果 |
相关技能
- 系统化调试 - 从编写能复现 Bug 的失败测试开始进行根因分析
- 代码审查 - 质量关卡,可同时验证测试覆盖率和生产代码更改
- 子 Agent 驱动的开发 - 相互隔离的子 Agent 会为每项子任务独立遵循 TDD 循环
关键词
tdd test-driven-development red-green-refactor failing-test-first test-first unit-testing regression-prevention atomic-commits
© 2026 googleadsagent.ai™ | Agent Skills™ | MIT 许可证