Skip to content

Matt Pocock 的 tdd 技能重点不是“测试先行”四个字,而是一次只推进一个 vertical slice。先写一条描述外部行为的失败测试,再写最小实现让它通过。不要让 AI 一口气写完所有测试,因为那往往是在测试想象中的代码形状。

AI 做 TDD 为什么要一条测试一条实现:Matt Pocock TDD 技能怎么用

下载 tdd 中文版 Skill ZIP

很多人让 AI 做 TDD,会得到一堆测试文件。

看起来很专业。

问题是,这些测试可能测的是 AI 想象出来的结构,不是最后真的需要的行为。

Matt Pocock 的 tdd 技能强调的是 vertical slice:一条测试,一条实现,一次反馈。

不要横向写测试

错误做法是:

text
先写 test1、test2、test3、test4
再实现 feature1、feature2、feature3、feature4

这会让 AI 在还没理解实现约束时,提前把测试结构定死。

后面你会发现测试耦合了内部函数、临时数据结构、mock 形状。代码一重构,测试就碎,但真实行为没有变。

一条行为一个循环

更稳的节奏是:

text
RED:写一条外部行为测试
GREEN:写最小实现让它通过
再进入下一条行为

每一轮都回答一个具体问题:系统现在多了什么能力?

比如 API Key 管理功能,可以这样走:

  1. 测试“用户能看到当前 API Key 状态”。
  2. 写最小实现。
  3. 测试“用户能保存新的 API Key”。
  4. 写最小实现。
  5. 测试“保存失败时显示错误”。
  6. 写最小实现。

这比一次性生成完整测试套件慢一点,但更不容易跑偏。

测行为,不测实现细节

这个技能特别强调:测试应该通过公共接口验证行为。

不要让 AI 写这种测试:

  • 调用私有函数。
  • 检查内部变量。
  • mock 掉所有真实路径。
  • 断言某个实现步骤被调用。

更好的测试描述是用户能看懂的能力:保存成功、权限被拒绝、列表为空、错误可见。

如果测试读起来像实现说明,后面重构会很痛苦。

给 AI 的 TDD Prompt

md
请按 Matt Pocock TDD 风格实现这个功能。
一次只写一条失败测试,再写最小实现让它通过。
测试必须验证外部可观察行为,不要测试私有实现细节。
每完成一个 red-green 循环,先停下来说明下一条行为是什么。
不要一次性写完整测试套件。

这里最关键的是“每完成一个循环先停下来”。

AI 很容易越写越快,你要把节奏拉回一条行为一次反馈。

和站内 TDD 文章的区别

站内已有 AI 修 bug 为什么要先写测试。那篇更偏通用测试验证:为什么要先有失败测试、如何防回归。

这篇更偏 Matt Pocock 的具体纪律:不要横向切片,不要一次性写完所有测试,用 vertical slice 一步一步推进。

你可能还需要

同类技能:

如果 AI 一次生成了很多测试,先让它停下来。问它第一条用户可见行为是什么,只保留那一条开始。