mcpField
T
tdd

tdd

github.com/guillermomurillo测试与质量439 次安装16 周前更新
代码仓库

关于 tdd

tdd 是指导开发者遵循红—绿循环并编写持久、关注行为的测试技能。它强调先确认公共测试边界,再逐个编写失败测试并实现最小改动,避免与实现耦合或同义反复的测试。

主要功能

  1. 01红—绿 TDD 循环指南
  2. 02通过公共接口验证行为
  3. 03预先确认测试边界
  4. 04避免与实现耦合的测试
  5. 05一次一项测试的纵向切片

适用场景

  1. 01规划要测试的公共接口
  2. 02开发过程中添加行为测试
  3. 03让测试不易因实现重构而失效

安装

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

$npx skills add https://github.com/guillermomurillo/memo-flow --skill tdd

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

附带文件mocking.mdtests.md

详细介绍

测试驱动开发

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

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

什么是好测试

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

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

接缝——测试的位置

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

只能在事先约定的接缝处测试。 编写任何测试之前,先列出要测试的接缝,并与用户确认。未经确认的接缝不得编写测试。你无法测试所有内容——事先约定接缝,才能让测试精力集中在关键路径和复杂逻辑上,而不是覆盖每个边缘情况。

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

反模式

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

循环规则

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

评论

支持 Markdown