mcpField
T
tdd

tdd

github.com/nstaab1测试与质量049 次安装3 周前更新
代码仓库

关于 tdd

tdd 是面向开发者的测试驱动开发参考技能。它规定以行为为中心的测试、预先确认测试边界,以及一次推进一个纵向切片的红绿循环。

主要功能

  1. 01通过公共接口验证行为
  2. 02测试前确认测试边界
  3. 03先写失败测试再实现
  4. 04每轮完成一个纵向切片
  5. 05避免耦合实现或同义反复的测试

适用场景

  1. 01围绕关键公共接口规划测试
  2. 02通过渐进式测试循环开发功能
  3. 03让测试在实现重构后保持稳定

安装

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

$npx skills add https://github.com/nstaab1/nathan-agent-skills --skill tdd

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

包含的文件

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

mocking.md
tests.md
agents/
openai.yaml

详细介绍

测试驱动开发

TDD 是红 → 绿循环。这项技能是参考指南,旨在让这个循环产出值得保留的测试:什么是好的测试、测试应放在哪里、反模式,以及循环的规则。每个部分都适用于每一轮循环:在循环前和过程中查阅,而不是事后再看。

探索代码库时,请阅读 GLOSSARY.md(如果存在),确保测试名称和接口术语符合项目的领域语言,并遵循你正在修改的区域中的 ADR。

什么是好的测试

测试通过公共接口验证行为,而不是实现细节。代码可以彻底改变;测试不应改变。好的测试读起来像一份规范:“用户可以使用有效购物车结账”准确说明了现有功能,而且由于它不依赖内部结构,因此能够经受重构。

示例请参阅 tests.md,模拟指南请参阅 mocking.md。

接缝:测试应放在哪里

接缝是你进行测试的公共边界:在此接口处,你可以观察行为,而无需深入内部。测试应位于接缝处,绝不能针对内部实现。

只在事先约定的接缝处测试。 编写任何测试前,先写下要测试的接缝,并与用户确认。未经确认的接缝处不得编写测试。你无法测试所有内容,因此提前约定接缝,才能让测试工作聚焦于关键路径和复杂逻辑,而不是每个边缘情况。

请询问:“公共接口是什么?我们应该测试哪些接缝?”

当接口的形态本身存在疑问时(模块的深度、接缝的位置、接口应暴露什么),请调用 Skill 工具并输入“codebase-design”,以获取相关术语。它是有关模块、接口、深度、接缝、适配器、杠杆和局部性的共同参考来源;应将其作为参考查阅,而不是运行一个会话。

反模式

  • 与实现耦合:模拟内部协作者、测试私有方法,或通过旁路验证(例如查询数据库,而不是使用接口)。判断标准:重构后行为没有改变,测试却失败了。
  • 同义反复:断言以代码相同的方式重新计算预期值(expect(add(a, b)).toBe(a + b)、用相同方法手工得出的快照、断言一个常量等于自身),因此测试必然通过,永远不可能与代码结果不一致。预期值必须来自独立的事实来源:已知正确的字面值、演算示例或规范。
  • 横向切片:先编写所有测试,再编写所有实现。批量测试验证的是_想象中的_行为:测试关注的是事物的_形态_,而不是面向用户的行为;它们会对真实变更失去敏感性,而且你会在理解实现之前就确定测试结构。应改用纵向切片:一个测试 → 一个实现 → 重复;每个测试都是一颗曳光弹,根据上一轮的经验作出调整。

循环规则

  • 先红后绿。 先编写失败的测试,然后只写足以让它通过的代码。不要预想未来的测试,也不要添加推测性功能。
  • 一次一个切片。 每轮只处理一个接缝、一个测试和一个最小实现。
  • 重构不属于循环的一部分。 重构属于审查阶段(参见 code-review 技能),而不属于红 → 绿实现循环。

评论

支持 Markdown