/tdd
测试驱动开发。适用于用户想用先写测试的方式构建功能或修复缺陷、提到 “red-green-refactor”,或需要集成测试时。
Claude Code
$ npx -y skills add vinvcn/mattpocock-skills-zh-cn --skill tdd --agent claude-code
Codex
$ npx skills add vinvcn/mattpocock-skills-zh-cn --skill tdd -a codex -y
Cursor
$ npx skills add vinvcn/mattpocock-skills-zh-cn --skill tdd -a cursor -y
Gemini CLI
$ npx skills add vinvcn/mattpocock-skills-zh-cn --skill tdd -a gemini-cli -y
GitHub Copilot
$ npx skills add vinvcn/mattpocock-skills-zh-cn --skill tdd -a github-copilot -y
OpenCode
$ npx skills add vinvcn/mattpocock-skills-zh-cn --skill tdd -a opencode -y
Windsurf
$ npx skills add vinvcn/mattpocock-skills-zh-cn --skill tdd -a windsurf -y
SKILL.md
tdd.SKILL.mdname: tdd
description: 测试驱动开发。适用于用户想用先写测试的方式构建功能或修复缺陷、提到 “red-green-refactor”,或需要集成测试时。
测试驱动开发
TDD 是 red -> green loop。这个 skill 是让该 loop 产出值得保留的 tests 的 reference:什么是好 test、tests 应该放在哪里、anti-patterns,以及 loop 的规则。每个 cycle 前和 cycle 中都要参考这些内容,而不是事后才看。
探索 codebase 时,读取 `GLOSSARY.md`(如果存在),让 test names 和 interface vocabulary 与项目 domain language 对齐,并尊重你触碰区域的 ADRs。
什么是好 test
Tests 应通过 public interfaces 验证 behavior,而不是 implementation details。代码可以完全改变;tests 不该随之改变。一个好 test 读起来像 specification:"user can checkout with valid cart" 能清楚说明存在什么能力;因为它不关心 internal structure,所以能承受 refactors。
示例见 [tests.md](tests.md),mocking 规则见 [mocking.md](mocking.md)。
Seams:tests 放在哪里
**Seam** 是你测试的 public boundary:可以观察 behavior、但不伸手进入内部的 interface。Tests 放在 seams 上,绝不针对 internals。
**只测试预先认可的 seams。** 写任何 test 前,先写下要测试的 seams 并与用户确认。未经确认的 seam 不写 test。你无法测试所有东西;提前认可 seams,才能把测试精力放在 critical paths 和复杂 logic 上,而不是每个 edge case。
询问:"What's the public interface, and which seams should we test?" 给每个提议的 seam 加一行说明:它能捕获什么,又会漏掉什么。
当 interface 的形状本身就是问题所在时(module 该多深、seam 该放在哪里、interface 应该暴露什么),调用 Skill 工具并指定 `codebase-design` 获取词汇。它是 module、interface、depth、seam、adapter、leverage 和 locality 这些术语的共享来源,是供查阅的 reference,而不是要运行的 session。
反模式
- **Implementation-coupled**:mock internal collaborators、测试 private methods,或通过 side channel 验证(例如不用 interface 而直接查询 database)。特征是 refactor 时 test 失败,但 behavior 没变。
- **Tautological**:assertion 以和代码相同的方式重新计算 expected value(`expect(add(a, b)).toBe(a + b)`、手工按同一逻辑生成 snapshot、把 constant 断言等于它自己),因此天然 pass,永远无法与代码 disagree。Expected values 必须来自独立 source of truth:known-good literal、worked example 或 spec。
- **Horizontal slicing**:先写所有 tests,再写所有 implementation。批量 tests 验证的是 _想象中的_ behavior:你测试的是东西的 _shape_,不是 user-facing behavior;tests 会对真实变化迟钝,并在理解 implementation 前承诺 test structure。改用 **vertical slices**:一个 test -> 一个 implementation -> repeat,每个 test 都是回应上一轮学习的 **tracer bullet**。
Loop 的规则
- **Red before green.** 先写 failing test,再只写足够让它通过的代码。不要预判未来 tests,也不要添加 speculative features。
- **One slice at a time.** 每个 cycle 只处理一个 seam、一个 test、一个 minimal implementation。
- **Refactoring is not part of the loop.** Refactoring 属于 review stage(见 `code-review` skill),不属于 red -> green implementation cycle。
Read more
name: tdd description: 测试驱动开发。适用于用户想用先写测试的方式构建功能或修复缺陷、提到 “red-green-refactor”,或需要集成测试时。
测试驱动开发
TDD 是 red -> green loop。这个 skill 是让该 loop 产出值得保留的 tests 的 reference:什么是好 test、tests 应该放在哪里、anti-patterns,以及 loop 的规则。每个 cycle 前和 cycle 中都要参考这些内容,而不是事后才看。
探索 codebase 时,读取 `GLOSSARY.md`(如果存在),让 test names 和 interface vocabulary 与项目 domain language 对齐,并尊重你触碰区域的 ADRs。
什么是好 test
Tests 应通过 public interfaces 验证 behavior,而不是 implementation details。代码可以完全改变;tests 不该随之改变。一个好 test 读起来像 specification:"user can checkout with valid cart" 能清楚说明存在什么能力;因为它不关心 internal structure,所以能承受 refactors。
示例见 [tests.md](tests.md),mocking 规则见 [mocking.md](mocking.md)。
Seams:tests 放在哪里
**Seam** 是你测试的 public boundary:可以观察 behavior、但不伸手进入内部的 interface。Tests 放在 seams 上,绝不针对 internals。
**只测试预先认可的 seams。** 写任何 test 前,先写下要测试的 seams 并与用户确认。未经确认的 seam 不写 test。你无法测试所有东西;提前认可 seams,才能把测试精力放在 critical paths 和复杂 logic 上,而不是每个 edge case。
询问:"What's the public interface, and which seams should we test?" 给每个提议的 seam 加一行说明:它能捕获什么,又会漏掉什么。
当 interface 的形状本身就是问题所在时(module 该多深、seam 该放在哪里、interface 应该暴露什么),调用 Skill 工具并指定 `codebase-design` 获取词汇。它是 module、interface、depth、seam、adapter、leverage 和 locality 这些术语的共享来源,是供查阅的 reference,而不是要运行的 session。
反模式
- **Implementation-coupled**:mock internal collaborators、测试 private methods,或通过 side channel 验证(例如不用 interface 而直接查询 database)。特征是 refactor 时 test 失败,但 behavior 没变。
- **Tautological**:assertion 以和代码相同的方式重新计算 expected value(`expect(add(a, b)).toBe(a + b)`、手工按同一逻辑生成 snapshot、把 constant 断言等于它自己),因此天然 pass,永远无法与代码 disagree。Expected values 必须来自独立 source of truth:known-good literal、worked example 或 spec。
- **Horizontal slicing**:先写所有 tests,再写所有 implementation。批量 tests 验证的是 _想象中的_ behavior:你测试的是东西的 _shape_,不是 user-facing behavior;tests 会对真实变化迟钝,并在理解 implementation 前承诺 test structure。改用 **vertical slices**:一个 test -> 一个 implementation -> repeat,每个 test 都是回应上一轮学习的 **tracer bullet**。
Loop 的规则
- **Red before green.** 先写 failing test,再只写足够让它通过的代码。不要预判未来 tests,也不要添加 speculative features。
- **One slice at a time.** 每个 cycle 只处理一个 seam、一个 test、一个 minimal implementation。
- **Refactoring is not part of the loop.** Refactoring 属于 review stage(见 `code-review` skill),不属于 red -> green implementation cycle。
Matt Pocock 的 mattpocock/skills:第三方简体中文本地化,非官方仓库。这些 agent skills 是他每天用于真实工程工作的,不是 vibe coding:小、易改、可组合,适用于任何模型。 本仓库定期同步上游,并额外支持 DeepSeek Harness(dsh)插件安装,安装后以 /zh- 调用任意技能(上游没有的能力,详见 dsh-plugin/README.md)。
Other skills on vinvcn-mattpocock-skills.
code-review
从固定点(commit、branch、tag 或 merge-base)开始,按 Standards(代码是否符合本仓库记录的编码标准?)和 Spec(代码是否符合来源 issue/spec…
codebase-design
用于设计深模块的共享词汇。适用于用户想设计或改进模块接口、寻找深化机会、决定 seam 放在哪里、让代码更容易测试或更适合 AI 导航,或其他技能需要深模块词汇时。
diagnosing-bugs
面向棘手缺陷和性能回退的诊断循环。适用于用户说 “diagnose” / “debug this”,或报告某些东西 broken、throwing、failing、slow 时。
More skills from other plugins.
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
ask-matt
Ask which skill or flow fits your situation. A router over the skills in this repo.
Questions about tdd.
- Which coding agents can use tdd?
- tdd installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

