关于 tdd
一项指导编码 Agent 实践 TDD 的技能,强调先确认公共接口的测试边界,再逐个完成红—绿切片。内容还涵盖测试质量、模拟策略和常见反模式。
主要功能
- 01红—绿开发循环
- 02先商定测试边界
- 03测试公共行为
- 04测试质量与模拟指导
- 05避免测试耦合实现细节
适用场景
- 01实现前规划测试边界
- 02以小型测试驱动切片构建功能
- 03检查测试是否存在循环断言或脆弱耦合
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ hu3rror/ my-skills --skill tdd安装后在 Claude Code 中输入/tdd确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
mocking.mdtests.mdagents/openai.yaml详细介绍
测试驱动开发
TDD 是红 → 绿循环。本技能是参考指南,旨在让这个循环产出值得保留的测试:什么是好测试、测试应放在哪里、反模式,以及循环规则。每个部分都适用于每次循环:在循环前和循环中查阅,而不是事后查阅。
探索代码库时,请阅读 GLOSSARY.md(如果存在),以确保测试名称和接口词汇符合项目的领域语言,并遵守你正在修改区域的 ADR。
什么是好测试
测试通过公共接口验证行为,而不是实现细节。代码可以彻底改变,测试不应如此。好的测试读起来就像一份规范:“用户可以使用有效购物车结账”准确说明了现有的功能,并且由于不关心内部结构,因此能经受重构。
示例请参阅 tests.md,模拟指南请参阅 mocking.md。
接缝:测试的位置
接缝是你进行测试的公共边界:观察行为而不深入内部的接口。测试应位于接缝上,绝不能针对内部实现。
只在事先约定的接缝上测试。 编写任何测试之前,先写下要测试的接缝,并与用户确认。未经确认的接缝上不得编写测试。你无法测试所有内容,因此提前商定接缝,才能让测试投入聚焦关键路径和复杂逻辑,而不是每一种边缘情况。
请询问:“公共接口是什么?我们应该测试哪些接缝?” 为每个提议的接缝写一句说明,指出它能捕获什么、不能捕获什么。
当接口本身的形态尚不明确时(模块的深度、接缝的位置、接口应公开什么),请加载“codebase-design”技能(阅读其 SKILL.md)以了解相关术语。它是关于模块、接口、深度、接缝、适配器、杠杆和局部性这些术语的共同参考来源,应作为参考查阅,而不是启动一个会话。
反模式
- 与实现耦合:模拟内部协作者、测试私有方法,或通过旁路验证(例如查询数据库而不是使用接口)。判断标志:重构时测试会失败,但行为并未改变。
- 同义反复:断言以与代码相同的方式重新计算预期值(
expect(add(a, b)).toBe(a + b)、以相同方式手动推导的快照、断言常量等于自身),因此测试必然通过,永远无法与代码结果产生分歧。预期值必须来自独立的事实来源:已知正确的字面值、完整示例或规范。 - 横向切片:先编写所有测试,再编写所有实现。批量测试验证的是_想象中_的行为:测试的是事物的_形态_,而不是面向用户的行为;测试会对真实变化失去敏感性,并且你会在理解实现之前就确定测试结构。应改为按纵向切片工作:一个测试 → 一个实现 → 重复,每个测试都是一发曳光弹,根据上一轮的收获作出调整。
循环规则
- 先红后绿。 先编写失败的测试,然后只写足以让它通过的代码。不要预先考虑未来的测试或添加推测性功能。
- 一次一个切片。 每轮一个接缝、一个测试、一个最小实现。
- 重构不属于循环。 重构属于评审阶段(参见
code-review技能),而不是红 → 绿实现循环的一部分。