测试驱动开发Skill test-driven-development

测试驱动开发(TDD)是一种软件开发方法,通过先写测试代码再写实现代码,遵循RED/GREEN/REFACTOR循环,确保代码质量、防止回归错误,并促进重构。适用于新功能开发、bug修复、重构和行为更改。关键词:测试驱动开发、TDD、软件测试、单元测试、RED/GREEN/REFACTOR、测试优先、代码质量、敏捷开发。

测试 0 次安装 0 次浏览 更新于 3/17/2026

name: test-driven-development description: 先写测试,看着它失败,编写最小代码使其通过 version: 3.2.0 category: testing author: Jesse Vincent license: MIT source: https://github.com/obra/superpowers-skills/tree/main/skills/testing/test-driven-development progressive_disclosure: entry_point: summary: “通过严格的RED/GREEN/REFACTOR循环强制测试优先开发。永远不要在失败测试之前写实现代码。” when_to_use: “在实现任何功能或bug修复时,在写实现代码之前。总是用于新功能、bug修复、重构和行为更改。” quick_start: “1. 写失败测试 2. 看着它失败(验证) 3. 编写最小代码使其通过 4. 看着它通过(验证) 5. 如果需要,重构 6. 重复” references: - workflow.md - examples.md - philosophy.md - anti-patterns.md - integration.md context_limit: 800 tags:

  • tdd
  • testing
  • red-green-refactor
  • test-first

测试驱动开发 (TDD)

概述

先写测试。看着它失败。编写最小代码使其通过。

核心原则: 如果你没有看着测试失败,你就不知道它是否测试了正确的东西。

此技能通过遵循RED/GREEN/REFACTOR循环强制严格的测试优先开发。违反规则的文字就是违反规则的精神。

何时使用此技能

总是:

  • 新功能
  • Bug修复
  • 重构
  • 行为更改

例外(询问人类伙伴):

  • 临时原型
  • 生成的代码
  • 配置文件

想着“跳过TDD就这一次”?停止。这是合理化。

铁律

没有失败测试前,不写生产代码

在测试前写代码?删除它。重新开始。

没有例外:

  • 不要保留它作为“参考”
  • 不要在写测试时“适应”它
  • 删除意味着删除

核心原则

  1. RED:先写失败测试
  2. GREEN:编写最小代码使测试通过
  3. REFACTOR:在保持测试绿色的同时改进代码
  4. NEVER:在测试前写实现

快速开始

RED/GREEN/REFACTOR 循环

RED → 验证 RED → GREEN → 验证 GREEN → REFACTOR → 重复
  1. RED:写一个最小测试显示期望行为
  2. 验证 RED:运行测试,确认它因正确原因失败
  3. GREEN:编写最简单的代码使测试通过
  4. 验证 GREEN:运行测试,确认它通过
  5. REFACTOR:清理同时保持测试绿色
  6. 重复:下一个测试用于下一个功能

循环详情

RED:写一个最小测试(一个行为,清晰名称,真实代码) 验证 RED:强制 - 看着它因正确原因失败 GREEN:编写最简单的代码通过(无额外) 验证 GREEN:强制 - 看着它通过,所有测试通过 REFACTOR:清理同时保持测试绿色(可选)

导航

获取详细信息:

  • 工作流:完整的RED/GREEN/REFACTOR工作流,带有详细示例
  • 示例:现实世界TDD场景,逐步演练
  • 哲学:为什么顺序重要,为什么测试后不行
  • 反模式:常见错误、合理化和红旗
  • 集成:使用TDD与调试和其他技能

关键提醒

  • 总是在实现前写测试
  • 让每个测试先失败以验证它测试了某些东西
  • 保持实现最小 - 仅足以通过测试
  • 仅在测试绿色时重构
  • 一次一个循环 - 小步骤
  • 如果测试立即通过,它没有测试新行为

红旗 - 停止并重新开始

如果你发现自己:

  • 在测试前写代码
  • 测试立即通过
  • 无法解释为什么测试失败
  • “我会测试后”
  • “保留作为参考”
  • “已经花了X小时,删除是浪费”
  • “测试后达到相同目的”

所有这些意味着:删除代码。用TDD重新开始。

为什么顺序重要

测试后立即通过(证明不了什么),测试先失败然后通过(证明它有效)。详见哲学

与其他技能的集成

  • 系统化调试:在阶段4创建失败测试(bug复现)
  • 完成前验证:验证测试存在并看着它们失败
  • 深度防御:在实现功能后添加验证测试

现实影响

从TDD实践:

  • 测试优先:95%+ 首次正确性
  • 测试后:40% 首次正确性
  • TDD时间:每个功能25-45分钟(包括测试)
  • 非TDD时间:15分钟编码 + 60-120分钟调试

TDD是实用的 - 在提交前找到bug,防止回归,记录行为,启用重构。