mcpField
T
test-driven-development

test-driven-development

github.com/itallstartedwithaidea测试与质量4479 次安装29 周前更新
代码仓库

关于 test-driven-development

引导编码 Agent 按测试驱动开发流程工作:先编写并确认失败测试,再实现最小代码、重构并提交。适用于需要测试验证行为且便于审查的渐进式代码修改。

主要功能

  1. 01RED-GREEN-REFACTOR 循环
  2. 02确认测试因预期原因失败
  3. 03实现通过测试的最少代码
  4. 04保持测试通过并重构
  5. 05每轮迭代后提交

适用场景

  1. 01开发新函数或模块
  2. 02用失败测试复现缺陷
  3. 03在重构前后检查测试
  4. 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 许可证

评论

支持 Markdown