ARTICLE · 1100462
别让 AI 写完代码才补测试:这个 Agent Skill 让测试先行成为默认工作流
一、Skill 概述
Test-Driven Development(TDD):让 AI Agent 真正按照“测试先行”方式开发代码的工程化 Skill。
Obra 开源的 Superpowers 中,TDD Skill 用于新功能、Bug 修复、重构和行为变更等开发任务,核心要求非常明确:先写一个会失败的测试,确认它确实因为目标行为缺失而失败,再编写最小实现让测试通过,最后进行重构。
它试图解决 AI Coding Agent 常见的一个问题:Agent 写完代码后再补测试,测试看似齐全,却没有真正证明实现是否正确。

二、Skill 核心内容 📌
传统开发中,TDD 更多是一种工程实践;放到 AI Agent 时代,它进一步变成了一套约束 Agent 编码行为的工作流程。
这个 Skill 最核心的规则可以概括为:
没有先看到失败的测试,就不要写生产代码。
完整流程是经典的 Red → Green → Refactor:
RED|红灯
先针对目标行为编写测试,然后运行测试,确认它因为“功能尚未实现”而失败。
GREEN|绿灯
只编写能够让测试通过的最小生产代码,避免提前加入无关设计和额外功能。
REFACTOR|重构
测试通过后,再改善代码结构、消除重复、优化实现,同时持续保持测试处于通过状态。
Skill 对这一流程的约束非常严格:如果已经先写了生产代码,再补测试,就应该删除已有实现,从测试重新开始,而不是把现有代码当作“参考答案”。
此外,Skill 还提供了针对测试质量的进一步指导,例如一个测试应该明确它究竟要捕获什么错误,并尽可能测试真实行为,而不是通过大量 Mock 制造一个“看起来通过”的测试。
三、五句值得学习的英文句子
1.Write the test first. Watch it fail. Write minimal code to pass.
译文:先写测试,看着它失败,再编写让测试通过的最少代码。
2.If you didn't watch the test fail, you don't know if it tests the right thing.
译文:如果你没有亲眼看到测试失败,就无法确认它是否真正测试了你想测试的行为。
3.No production code without a failing test first.
译文:没有失败测试作为前提,就不要编写生产代码。
4.A test exists to catch a specific break.
译文:一个测试的存在,就是为了捕获某一种明确的代码错误。
5.Every test names the break it catches.
译文:每个测试都应该明确说明,它究竟要防止哪一种错误。
四、五大关键技术词汇
1. Test-Driven Development(TDD)
中文含义: 测试驱动开发
读音: test-driven development
开发场景: 单元测试、后端开发、API 开发、AI Coding Agent、Bug 修复
一句话理解:先用测试定义预期行为,再通过最小实现让测试通过,而不是先写代码再补测试。
2. Red-Green-Refactor
中文含义: 红灯—绿灯—重构
读音: red-green-refactor
开发场景: TDD、单元测试、持续重构、AI 辅助开发
一句话理解:先让测试失败,再用最少代码让它通过,最后在测试保护下重构代码。
3. Failing Test
中文含义: 失败测试
读音: failing test
开发场景: 新功能、Bug 修复、回归测试
一句话理解:测试首先必须真实失败,用来证明目标行为当前确实不存在或存在问题。
4. Production Code
中文含义: 生产代码
读音: production code
开发场景: 业务逻辑、API、服务端、前端应用
一句话理解:真正运行在产品中的代码,而不是测试代码、临时脚本或测试辅助代码。
5. Test Double / Mock
中文含义: 测试替身 / 模拟对象
读音: test double / mock
开发场景: 单元测试、外部 API、数据库、第三方服务
一句话理解:用替代对象隔离外部依赖,但 TDD Skill 强调不要为了“方便测试”而过度 Mock,优先验证真实行为。
五、核心技术思想 💡
TDD Skill 真正值得关注的地方,并不是简单地告诉 Agent“写测试”,而是把测试变成 AI 编码过程中的行为约束。
它实际上把开发流程固定成:
明确行为 → 编写失败测试 → 验证失败原因 → 最小实现 → 验证通过 → 重构
其中最重要的是 “验证失败原因”。
测试失败并不意味着 TDD 的 RED 阶段完成了。如果测试因为语法错误、环境问题、测试配置错误而失败,就不能进入下一步。必须确认:
它是因为目标功能还不存在而失败。
这会明显改变 AI Agent 的编码方式。
过去:
需求 → AI 写代码 → AI 补测试 → 测试通过
TDD Skill 更强调:
需求 → 定义行为 → 写失败测试 → 观察失败 → 最小实现 → 测试通过 → 重构
同时,它并不是要求所有事情机械套用 TDD。对于一次性原型、生成代码、配置文件等场景,Skill 明确列出了例外情况,并要求与用户确认。
这背后的核心理念其实非常适合 AI 编程:
不要让 Agent 根据自己的实现证明自己的实现是正确的,而是先建立一个独立的、可验证的行为标准。
这也是 Superpowers 整套方法论强调的 Evidence over claims|用证据代替“我已经完成”的口头判断。
六、开发者阅读建议
💡 个人观点
AI Coding 时代,真正值得改变的可能不是“让 AI 写更多代码”,而是让 AI 按照更可靠的工程流程写代码。TDD Skill 的价值就在这里:它把原本依赖开发者习惯的测试先行,转化成 Agent 可以遵循、验证和重复执行的工作流。对于 AI Agent 来说,测试不是写完代码后的检查,而应该成为决定代码能不能开始写的第一道门槛。
项目地址:
https://github.com/obra/superpowers/tree/main/skills/test-driven-development