Agent skill
tdd-assistant-asiaostrich-universal-dev-standa
Stars
163
Forks
31
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/data/tdd-assistant-asiaostrich-universal-dev-standa
SKILL.md
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 循環检查清单
┌─────────────────────────────────────────────────────────────────┐
│ 🔴 紅色阶段 │
│ □ 测试描述预期行为,而非实作 │
│ □ 测试名称清楚说明正在测试什麼 │
│ □ 测试遵循 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 快速參考
| 面向 | TDD | BDD | ATDD |
|---|---|---|---|
| 誰撰写 | 开发者 | 开发者 + BA + QA | 所有利益相关者 |
| 语言 | 程序码 | Gherkin(Given-When-Then) | 业务语言 |
| 层级 | 单元/元件 | 功能/場景 | 驗收 |
| 时机 | 编码期间 | 编码之前 | Sprint 之前 |
何时使用哪个
是技術实作細节嗎?
├─ 是 → TDD
└─ 否 → 有业务利益相关者嗎?
├─ 是 → 利益相关者需要阅读/验证测试嗎?
│ ├─ 是 → ATDD → BDD → TDD
│ └─ 否 → BDD → TDD
└─ 否 → TDD
工作流協助
紅色阶段指導
撰写失败测试时,确保:
-
清楚的意图
typescript// ❌ 模糊 test('it works', () => { ... }); // ✅ 清楚 test('should calculate discount when order total exceeds threshold', () => { ... }); -
单一行为
typescript// ❌ 多个行为 test('should validate and save user', () => { ... }); // ✅ 单一行为 test('should reject invalid email format', () => { ... }); test('should save user with valid data', () => { ... }); -
正确的斷言
typescript// ❌ 無斷言 test('should process order', () => { orderService.process(order); // 缺少斷言! }); // ✅ 清楚的斷言 test('should mark order as processed', () => { const result = orderService.process(order); expect(result.status).toBe('processed'); });
綠色阶段指導
讓测试通過时,记住:
-
最少实現
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'; // 剛好足夠通過「这个」测试 } -
漸进式泛化
- 第一个测试:硬编码答案
- 第二个测试:新增簡单条件
- 第三个测试:泛化模式
重構阶段指導
安全重構检查清单:
之前:
□ 所有测试都是綠色
□ 理解程序码在做什麼
期间(一次一个):
□ 提取方法 → 执行测试
□ 重新命名 → 执行测试
□ 消除重複 → 执行测试
□ 簡化条件 → 执行测试
之後:
□ 所有测试仍然綠色
□ 程序码更乾淨
□ 没有新功能
与 SDD 集成
使用規格驅动开发时:
Spec → 测试映射
| Spec 區段 | 测试类型 |
|---|---|
| 驗收标准 | 驗收测试(ATDD/BDD) |
| 业务規則 | 单元测试(TDD) |
| 邊界情况 | 单元测试(TDD) |
| 集成点 | 集成测试 |
工作流程
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 組織测试
});
配置偵测
此技能支援项目特定配置。
偵测順序
- 检查
CONTRIBUTING.md的「Disabled Skills」區段- 如果此技能在列表中,則对此项目停用
- 检查
CONTRIBUTING.md的「TDD Standards」區段 - 检查程序码庫中現有的测试模式
- 如果未找到,预设使用标准 TDD 实踐
首次设置
如果未找到配置且情境不明确:
-
詢問:「此项目尚未配置 TDD 偏好。您偏好哪种方法?」
- 純 TDD(紅-綠-重構)
- BDD 風格 TDD(Given-When-Then)
- ATDD 搭配 BDD 和 TDD
-
选择後,建议在
CONTRIBUTING.md中文件化:
markdown
## TDD 标准
### 偏好方法
- 主要:TDD(紅-綠-重構)
- 对於有业务利益相关者的功能:BDD
### 测试命名慣例
- 模式:`should_[行为]_when_[条件]`
- 範例:`should_return_error_when_email_invalid`
### 覆蓋率目標
- 单元:80%
- 集成:60%
详细指南
完整标准請參阅:
相关测试标准:
相关标准
版本历史
| 版本 | 日期 | 变更 |
|---|---|---|
| 1.0.0 | 2026-01-07 | 初始版本 |
授权
此技能依据 CC BY 4.0 授权釋出。
Didn't find tool you were looking for?