AgentSkillsCN

Tdd Assistant

Tdd Assistant

SKILL.md
--- frontmatter
source: ../../../../skills/tdd-assistant/SKILL.md
source_version: 1.0.0
translation_version: 1.0.0
last_synced: 2026-01-07
status: current

name: tdd description: | Guide developers through Test-Driven Development workflow. Use when: writing tests first, practicing TDD, red-green-refactor cycle, BDD scenarios. Keywords: TDD, test first, red green refactor, FIRST, BDD, ATDD, 测试驅动开发, 紅綠重構.

TDD 助手

语言: English | 简体中文

版本: 1.0.0 最後更新: 2026-01-07 適用範圍: Claude Code Skills


目的

此技能引導开发者完成测试驅动开发工作流程,協助他們:

  • 撰写有效的失败测试(紅色阶段)
  • 实現最少程序码讓测试通過(綠色阶段)
  • 在保持测试綠色的同时安全重構(重構阶段)
  • 識别并避免常見的 TDD 反模式
  • 集成 TDD 与 BDD 和 ATDD 方法
  • 根据情境適當地应用 TDD

快速參考

TDD 循環检查清单

code
┌─────────────────────────────────────────────────────────────────┐
│  🔴 紅色阶段                                                     │
│  □ 测试描述预期行为,而非实作                                     │
│  □ 测试名称清楚说明正在测试什麼                                   │
│  □ 测试遵循 AAA 模式(Arrange-Act-Assert)                       │
│  □ 测试因为「正确的原因」而失败                                   │
│  □ 失败消息清楚且可操作                                          │
├─────────────────────────────────────────────────────────────────┤
│  🟢 綠色阶段                                                     │
│  □ 撰写「最少」程序码讓测试通過                                   │
│  □ 「假裝」是可以接受的(如有需要可硬编码)                        │
│  □ 不要優化或過度设计                                            │
│  □ 测试現在通過                                                  │
│  □ 所有其他测试仍然通過                                          │
├─────────────────────────────────────────────────────────────────┤
│  🔵 重構阶段                                                     │
│  □ 消除重複(DRY)                                               │
│  □ 改善命名                                                      │
│  □ 如有需要提取方法                                              │
│  □ 「每次」变更後执行测试                                         │
│  □ 没有新增功能                                                  │
│  □ 所有测试仍然通過                                              │
└─────────────────────────────────────────────────────────────────┘

FIRST 原則快速參考

原則检查常見違規
Fast(快速)每个单元测试 < 100ms数据庫呼叫、文件 I/O、网络
Independent(獨立)無共享状态静态变數、执行順序依賴
Repeatable(可重複)結果總是相同DateTime.Now、Random、外部服务
Self-validating(自我验证)清楚的通過/失败手动检查日誌、無斷言
Timely(及时)程序码之前测试实現後才写测试

反模式快速偵测

症状可能的反模式快速修復
重構时测试失败测试实作細节只测试行为
测试通過但生产環境有 bug過度 mock新增集成测试
隨机测试失败测试相依性隔離测试状态
测试套件緩慢集成测试太多增加单元测试比例
团队回避写测试测试设置複雜用建構器簡化

TDD vs BDD vs ATDD 快速參考

面向TDDBDDATDD
誰撰写开发者开发者 + BA + QA所有利益相关者
语言程序码Gherkin(Given-When-Then)业务语言
层级单元/元件功能/場景驗收
时机编码期间编码之前Sprint 之前

何时使用哪个

code
是技術实作細节嗎?
├─ 是 → TDD
└─ 否 → 有业务利益相关者嗎?
         ├─ 是 → 利益相关者需要阅读/验证测试嗎?
         │        ├─ 是 → ATDD → BDD → TDD
         │        └─ 否 → BDD → TDD
         └─ 否 → TDD

工作流協助

紅色阶段指導

撰写失败测试时,确保:

  1. 清楚的意图

    typescript
    // ❌ 模糊
    test('it works', () => { ... });
    
    // ✅ 清楚
    test('should calculate discount when order total exceeds threshold', () => { ... });
    
  2. 单一行为

    typescript
    // ❌ 多个行为
    test('should validate and save user', () => { ... });
    
    // ✅ 单一行为
    test('should reject invalid email format', () => { ... });
    test('should save user with valid data', () => { ... });
    
  3. 正确的斷言

    typescript
    // ❌ 無斷言
    test('should process order', () => {
      orderService.process(order);
      // 缺少斷言!
    });
    
    // ✅ 清楚的斷言
    test('should mark order as processed', () => {
      const result = orderService.process(order);
      expect(result.status).toBe('processed');
    });
    

綠色阶段指導

讓测试通過时,记住:

  1. 最少实現

    typescript
    // 测试:should return "FizzBuzz" for numbers divisible by both 3 and 5
    
    // ❌ 過度设计的第一次实現
    function fizzBuzz(n: number): string {
      const divisibleBy3 = n % 3 === 0;
      const divisibleBy5 = n % 5 === 0;
      if (divisibleBy3 && divisibleBy5) return 'FizzBuzz';
      if (divisibleBy3) return 'Fizz';
      if (divisibleBy5) return 'Buzz';
      return n.toString();
    }
    
    // ✅ 當前测试的最少实現(假裝!)
    function fizzBuzz(n: number): string {
      return 'FizzBuzz'; // 剛好足夠通過「这个」测试
    }
    
  2. 漸进式泛化

    • 第一个测试:硬编码答案
    • 第二个测试:新增簡单条件
    • 第三个测试:泛化模式

重構阶段指導

安全重構检查清单:

code
之前:
□ 所有测试都是綠色
□ 理解程序码在做什麼

期间(一次一个):
□ 提取方法 → 执行测试
□ 重新命名 → 执行测试
□ 消除重複 → 执行测试
□ 簡化条件 → 执行测试

之後:
□ 所有测试仍然綠色
□ 程序码更乾淨
□ 没有新功能

与 SDD 集成

使用規格驅动开发时:

Spec → 测试映射

Spec 區段测试类型
驗收标准驗收测试(ATDD/BDD)
业务規則单元测试(TDD)
邊界情况单元测试(TDD)
集成点集成测试

工作流程

code
1. 阅读 Spec (SPEC-XXX)
   ↓
2. 識别驗收标准
   ↓
3. 撰写 BDD 場景(如適用)
   ↓
4. 对每个場景:
   ├─ TDD:紅 → 綠 → 重構
   └─ 標记 AC 为已实現
   ↓
5. 所有 AC 已实現?
   ├─ 是 → 標记 Spec 为完成
   └─ 否 → 返回步骤 4

测试文件參考

typescript
/**
 * SPEC-001:使用者验证 的测试
 *
 * 驗收标准:
 * - AC-1:使用者可以用有效憑证登入
 * - AC-2:無效密码顯示错误
 * - AC-3:3 次失败嘗試後帳号鎖定
 */
describe('使用者验证 (SPEC-001)', () => {
  // 依 AC 組織测试
});

配置偵测

此技能支援项目特定配置。

偵测順序

  1. 检查 CONTRIBUTING.md 的「Disabled Skills」區段
    • 如果此技能在列表中,則对此项目停用
  2. 检查 CONTRIBUTING.md 的「TDD Standards」區段
  3. 检查程序码庫中現有的测试模式
  4. 如果未找到,预设使用标准 TDD 实踐

首次设置

如果未找到配置且情境不明确:

  1. 詢問:「此项目尚未配置 TDD 偏好。您偏好哪种方法?」

    • 純 TDD(紅-綠-重構)
    • BDD 風格 TDD(Given-When-Then)
    • ATDD 搭配 BDD 和 TDD
  2. 选择後,建议在 CONTRIBUTING.md 中文件化:

markdown
## TDD 标准

### 偏好方法
- 主要:TDD(紅-綠-重構)
- 对於有业务利益相关者的功能:BDD

### 测试命名慣例
- 模式:`should_[行为]_when_[条件]`
- 範例:`should_return_error_when_email_invalid`

### 覆蓋率目標
- 单元:80%
- 集成:60%

详细指南

完整标准請參阅:

相关测试标准:


相关标准


版本历史

版本日期变更
1.0.02026-01-07初始版本

授权

此技能依据 CC BY 4.0 授权釋出。

來源: universal-dev-standards