mcpField
T
tdd

tdd

github.com/vinvcn测试与质量5.4k5.9k 次安装1 天前更新
代码仓库

关于 tdd

面向编码 Agent 的 TDD 参考 skill,指导测试设计、seam 选择与 red-green 循环。强调通过 public interface 验证行为,并以逐个 vertical slice 推进实现。

主要功能

  1. 01通过 public interface 测试行为
  2. 02先确认要测试的 seam
  3. 03避免实现耦合与同义断言
  4. 04逐个 vertical slice 推进
  5. 05遵循先 red 后 green

适用场景

  1. 01为新功能编写可适应重构的测试
  2. 02确定测试应覆盖哪些 public boundary
  3. 03避免批量编写测试后再实现

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/vinvcn/mattpocock-skills-zh-cn --skill tdd

安装后在 Claude Code 中输入/tdd确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

mocking.md
tests.md
agents/
openai.yaml

详细介绍

来自项目 README

测试驱动开发

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,mocking 规则见 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?"

当 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。

评论

支持 Markdown