# 测试驱动开发 (tdd)

> 以红到绿的循环先写测试再写实现，只在与用户确认过的公共接口上测试行为。

- 分类: [测试与调试](https://www.myskills.tools/zh/categories/testing-debugging/)
- 来源: 社区 · Matt Pocock
- 代码仓库: https://github.com/mattpocock/skills/tree/main/skills/engineering/tdd (commit 3f59913)
- SKILL.md: https://github.com/mattpocock/skills/blob/main/skills/engineering/tdd/SKILL.md
- 安装命令: `npx skills add mattpocock/skills --skill tdd`
- 许可证: MIT
- 兼容工具: Claude Code, Codex, Copilot, Gemini CLI
- 权限: read-repo ✓, write-files ✓, shell ✓, network ✗
- 状态: 扫描通过
- 规则扫描无法覆盖所有风险，安装前请阅读此技能的 SKILL.md，确认权限后再使用。

## 核心规则

先红后绿：先写失败的测试，再只写刚好让它通过的代码。

## 执行阶段

1. **了解领域语言** — 探索代码时阅读 GLOSSARY.md（如有），让测试命名与项目用语一致，并遵守相关 ADR。
2. **确认测试接口** — 写下要测试的公共接口（seam），各附一行说明能发现和发现不了什么，并请用户确认。
3. **写一个失败测试** — 在一个 seam 上通过公共接口测试行为，期望值来自独立的可信来源而非重算代码逻辑。
4. **最小实现** — 只写让测试通过所需的代码，不预先应对未来的测试，也不加推测性功能。
5. **纵向切片循环** — 一次一个测试、一个实现地重复循环；重构不在循环内，留到代码审查阶段。

## 权限说明（据 SKILL.md 整理）

| 能力 | 是否需要 | 说明 |
|---|---|---|
| 文件写入 | 需要 | 编写测试以及让测试通过的实现代码。 |
| 命令执行 | 仅测试时需要 | 运行测试，确认先失败再通过。 |
| 网络外发 | 不需要 | 流程中没有网络访问步骤。 |

## SKILL.md 头部信息（YAML）

```yaml
---
name: tdd
description: Test-driven development. Use when the user wants to build features or fix bugs test-first, mentions "red-green-refactor", or wants integration tests.
---
```

首页: https://www.myskills.tools/zh/ · URL: https://www.myskills.tools/zh/skills/tdd/
