mcpField
T
test-driven-development

test-driven-development

github.com/bbeierle12测试与质量958 次安装今天更新
代码仓库

关于 test-driven-development

test-driven-development 是一项指导开发者先写测试再编码的技能,采用 RED-GREEN-REFACTOR 循环。还涵盖测试质量、YAGNI、DRY 和小步提交。

主要功能

  1. 01RED-GREEN-REFACTOR 工作流
  2. 02测试优先的实现指导
  3. 03Arrange-Act-Assert 结构
  4. 04测试质量原则
  5. 05YAGNI、DRY 与提交建议

适用场景

  1. 01从失败测试开始开发新功能
  2. 02修复前复现软件缺陷
  3. 03重构前为现有代码准备测试
  4. 04保持变更精简且经过验证

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/bbeierle12/skill-mcp-claude --skill test-driven-development

安装后在 Claude Code 中输入/test-driven-development确认已加载。

附带文件_meta.json

详细介绍

测试驱动开发

TDD 铁律

先写代码,再写测试?删掉代码,重新开始。

这不容商量,也不是可选项。你无法为自己找理由来绕过这一点。

RED-GREEN-REFACTOR 循环

1. RED - 先编写一个失败的测试
  • 编写最小的测试,确保它因正确的原因而失败
  • 测试应该因为功能尚不存在而失败
  • 运行测试并确认它失败
2. GREEN - 让测试通过(最少代码)
  • 编写让测试通过所需的最少代码
  • 不要编写不必要的代码
  • 暂时不要优化
  • 暂时不要重构
3. REFACTOR - 改进代码
  • 现在可以清理代码了
  • 消除重复
  • 改进命名
  • 提取方法/函数
  • 重构后所有测试仍必须通过

禁止的自我辩解

如果你发现自己有以下任何想法,立即停下:

  • “这只是一个简单的函数” → 错。简单函数也需要测试。
  • “我之后再写测试” → 错。这不是 TDD。
  • “让我先把它弄好再说” → 错。先写测试。
  • “这个不需要测试” → 错。所有内容都需要测试。
  • “我手动测试一下就行” → 错。编写自动化测试。
  • “这个测试显而易见” → 错。照样写出来。
  • “我只是在探索” → 错。用测试来探索。

测试质量指南

好的测试应当:
  • 快速 - 测试应在几毫秒内运行
  • 隔离 - 测试之间没有依赖
  • 可重复 - 每次结果都相同
  • 自我验证 - 通过或失败,无需解读
  • 及时 - 在代码之前编写
测试结构(Arrange-Act-Assert):
// Arrange - Set up the test conditions
const input = createTestInput();

// Act - Execute the code under test
const result = functionUnderTest(input);

// Assert - Verify the expected outcome
expect(result).toBe(expectedValue);

何时使用此技能

  • 开始任何新功能时
  • 修复任何 Bug 时(先编写一个能复现该 Bug 的测试)
  • 重构现有代码时(先确保测试已存在)
  • 任何可能破坏现有功能的代码变更

YAGNI(你不会需要它)

不要编写目前还不需要的代码:

  • 不添加推测性功能
  • 不创建“以防万一”的抽象
  • 不要过早优化
  • 只构建当前所需的内容,不多不少

DRY(不要重复自己)

但只在 REFACTOR 阶段进行:

  • 先让它运行(GREEN)
  • 再让它正确(REFACTOR)
  • 暂时存在重复也没关系
  • 在重构时消除重复

提交策略

  • 每次 GREEN 后提交
  • 每次 REFACTOR 后提交
  • 小步、频繁提交
  • 每次提交都应通过所有测试

评论

支持 Markdown