test-driven-development

star 6

测试驱动开发,红-绿-重构循环

5tldr By 5tldr schedule Updated 1/16/2026

name: test-driven-development description: 测试驱动开发,红-绿-重构循环 source: https://github.com/obra/superpowers

测试驱动开发 (TDD)

基于 obra/superpowers 的 TDD 方法论。

核心原则

先写测试,再写代码。红-绿-重构。

触发条件

当用户需要实现新功能、修复 Bug、或重构代码时激活。

TDD 循环

🔴 红:写失败的测试

1. 明确要实现的功能
2. 写一个测试用例
3. 运行测试,确认失败
4. 失败原因应该是功能未实现

🟢 绿:写最少的代码让测试通过

1. 只写让测试通过的代码
2. 不要过度设计
3. 不要写额外功能
4. 运行测试,确认通过

🔵 重构:改进代码质量

1. 在测试保护下重构
2. 消除重复代码
3. 改善命名和结构
4. 运行测试,确认仍然通过

工作流程

┌─────────────────────────────────────┐
│                                     │
│   ┌─────────┐                       │
│   │  🔴 红   │ ← 写失败的测试        │
│   └────┬────┘                       │
│        │                            │
│        ▼                            │
│   ┌─────────┐                       │
│   │  🟢 绿   │ ← 写最少代码通过测试   │
│   └────┬────┘                       │
│        │                            │
│        ▼                            │
│   ┌─────────┐                       │
│   │  🔵 重构 │ ← 改进代码质量        │
│   └────┬────┘                       │
│        │                            │
│        └────────────────────────────┘
│                  重复
└─────────────────────────────────────┘

输出格式

# 🧪 TDD 实现记录

## 功能需求
[需求描述]

## 实现计划
1. [ ] [测试用例1]
2. [ ] [测试用例2]
3. [ ] [测试用例3]

---

## 迭代1

### 🔴 红:测试用例
```[语言]
// 测试代码

运行结果:❌ 失败 失败原因:[原因]

🟢 绿:实现代码

// 实现代码

运行结果:✅ 通过

🔵 重构

[重构说明,如果有的话]


迭代2

[同上格式]


最终代码

测试文件

// 完整测试代码

实现文件

// 完整实现代码

测试覆盖

  • 语句覆盖:X%
  • 分支覆盖:X%
  • 函数覆盖:X%

## 测试类型

### 单元测试
  • 测试单个函数/方法
  • 隔离外部依赖
  • 快速执行
  • 高覆盖率

### 集成测试
  • 测试模块间交互
  • 包含真实依赖
  • 验证接口契约
  • 中等执行速度

### 端到端测试
  • 测试完整流程
  • 模拟用户行为
  • 验证业务场景
  • 执行较慢

## 测试金字塔
    /\
   /  \
  / E2E \      ← 少量
 /──────\
/  集成   \    ← 适量

/──────────
/ 单元 \ ← 大量 /──────────────\


## 最佳实践

### 测试命名

// 格式:should_[预期行为]when[条件] test('should return empty array when input is empty') test('should throw error when user not found')


### 测试结构 (AAA)

// Arrange - 准备 const input = [1, 2, 3]

// Act - 执行 const result = sum(input)

// Assert - 断言 expect(result).toBe(6)


### FIRST 原则

F - Fast(快速) I - Independent(独立) R - Repeatable(可重复) S - Self-validating(自验证) T - Timely(及时)


## 常见陷阱

### ❌ 避免
- 先写代码再补测试
- 测试依赖执行顺序
- 测试实现细节而非行为
- 测试覆盖率追求100%但质量低
- 忽略边界条件

### ✅ 建议
- 严格遵循红-绿-重构
- 每个测试独立运行
- 测试公开接口和行为
- 关注有意义的覆盖率
- 覆盖边界和异常情况
Install via CLI
npx skills add https://github.com/5tldr/claude-skills --skill test-driven-development
Repository Details
star Stars 6
call_split Forks 1
navigation Branch main
article Path SKILL.md
More from Creator