# Tdd

> 通过用户可观察的公开 seam 严格执行一个失败测试、最小实现、同一测试转绿的纵向开发循环。

- Skill: `fufankeji/tdd` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add fufankeji/tdd`
- Raw SKILL.md: https://api.skillmd.com/api/skills/fufankeji/tdd/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: fufankeji (https://skillmd.com/u/fufankeji)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/fufankeji/tdd

---


# 测试驱动开发

本 Skill 改造自 `mattpocock/skills` 的 `tdd`，固定上游提交为 `068b6e0c62393147daf03530149cdce209c93da8`。测试和 Mock 指南见同目录 `tests.md`、`mocking.md`，许可证见 `LICENSE.txt`。

## 开始前

1. 读取 `AGENTS.md`、`CONTEXT.md`、相关 ADR 和 `.scratch/<slug>/spec.md`。
2. 规格必须为 `ready-for-agent`，并明确公开测试 seam。没有规格或 seam 未确认时停止开发。
3. 查看现有测试，优先沿用最高层 seam：浏览器公开行为、CLI 输出或公开 API。
4. 期望值必须来自规格中的独立字面量或已知正确示例，不得复制实现算法计算期望。

## Red → Green 循环

每次只做一个纵切：

1. 写一个最小测试，只验证一项用户可观察行为。
2. 立即运行该测试并保留真实非零退出结果。失败必须因为产品能力缺失，不能通过写错选择器、破坏依赖或关闭服务制造。
3. 只实现让当前测试通过所需的最少代码，不顺手加入下一项功能。
4. 再次运行同一个测试，必须真实返回零。
5. 运行相邻回归测试，确认没有破坏已确认视觉和交互。
6. 完成本轮后才进入下一个纵切。禁止先批量写测试再批量实现。

每轮记录：测试 seam、Red 命令与关键失败、Green 命令与结果、修改文件。可以写入 `output/dev-trace/`，但记录不能代替真实命令。

## Seam 判断表

- 用户在网页上点击、拖拽或下载：使用 Playwright 浏览器 seam。
- 用户运行命令得到文件或文本：使用 CLI seam。
- 外部调用方使用函数或接口：使用公开 API seam。
- 只能通过私有方法或内部调用次数验证：seam 选择错误，应回到更高层公开边界。

## 测试约束

- 只 Mock 外部 API、数据库、时间、随机性等系统边界；不要 Mock 自己控制的内部模块。
- 不查询旁路状态来替代公开行为验证。
- 不做与实现同构的计算或快照堆积。
- Red 状态不重构；全绿后再单独评审结构。
- 最终使用 DeepSeek Harness 的 Shell 工具执行项目构建和浏览器验收；它们不能替代每一轮真实 Red/Green。

## 完成条件

- 至少一组同测试的真实 Red 与 Green。
- 规格中的用户故事由公开 seam 覆盖。
- 完整回归、构建和浏览器验收通过，或如实列出未通过项。

