📚 测试工具 全难度 📦 Obra

test-driven-development

红-绿-重构流程,测试金字塔 80/15/5,Beyonce 规则。

📄 相关文章

📊 评分明细

📦 打包完整度
2.4 2.4 / 2.5
🎯 实用性
2.4 2.4 / 2.5
📖 文档清晰度
1.9 1.9 / 2
👥 社区影响力
1.4 1.4 / 1.5
🔗 集成度
1.4 1.4 / 1.5

🎯 适用场景

免费Skill系统测试

obra-test-driven-development 快速入门

强制 AI 走测试驱动开发,杜绝”先写代码后补测试”的借口。

这是什么?解决什么问题?

软件开发圈有一句老话:“测试驱动开发(TDD)是写出好代码的捷径”。但现实是,绝大多数开发者(包括 AI)在写代码时都跳过测试,理由五花八门:“时间紧”、“测试不好写”、“业务逻辑复杂,先看看能不能跑通”。
obra-test-driven-development Skill 强制 AI 走 TDD 流程:先写失败的测试(Red),写最少代码让它通过(Green),再重构(Refactor)。它还内置了几个重要原则:

  • 测试金字塔 80/15/5:80% 单元测试、15% 集成测试、5% E2E 测试
  • Beyonce 规则:“If you like it, you should put a test on it”——你写一行代码,就给它写一个测试
  • DAMP 优于 DRY:测试代码里,描述性(Descriptive)比简洁性更重要,可以重复,不要过度抽象
    这个 Skill 不是教你 TDD 理论,而是把这个流程编进 AI 的工作流,让 AI 没办法跳过测试。

准备工作

  • Python 3.10+/Node.js 18+ 等主流语言环境
  • 至少一种测试框架:pytest(Jest、Go test、Rust cargo test 都可)
  • 支持 Skill 的 AI 客户端
  • 一个待开发的小功能或待修复的 Bug
  • 至少 1 小时学习时间

3 步快速上手

第 1 步:克隆仓库并查看 Skill

git clone https://github.com/addyosmani/agent-skills.git<br>
cd agent-skills<br>
ls skills/test-driven-development/<br>
```<br>
你会看到 `SKILL.md`、示例代码、测试模板。<br>
### 第 2 步:加载 Skill<br>
```bash<br>
claude --skill obra-test-driven-development<br>
```<br>
启动后告诉 AI:
> "我想给购物车功能加一个'满 100 减 20'的折扣规则,严格走 TDD。"

### 第 3 步:观察 AI 走 Red-Green-Refactor

AI 会按流程工作:

=== RED 阶段 ===

让我先写一个失败的测试,定义期望行为:


def test_calculate_total_with_discount():

cart = ShoppingCart()

cart.add(Item(price=100))

assert cart.calculate_total() == 80  # 满100减20

运行 pytest: FAIL (因为 calculate_total 还没实现)

=== GREEN 阶段 ===

写最少代码让它通过:


def calculate_total(self):

if sum(item.price for item in self.items) >= 100:

return sum(item.price for item in self.items) - 20

return sum(item.price for item in self.items)

运行 pytest: PASS

=== REFACTOR 阶段 ===

代码太丑,重构一下:


def calculate_total(self):

subtotal = sum(item.price for item in self.items)

return subtotal - self._calculate_discount(subtotal)

def _calculate_discount(self, subtotal):

return 20 if subtotal >= 100 else 0

运行 pytest: PASS


整个流程跑下来,你的功能不仅可用,还有 100% 测试覆盖。

## 常见踩坑

1. **测试和实现同时写**:这是 TDD 的常见反模式。Skill 强制先测试后代码,但人写的时候容易偷懒。

2. **测试粒度过大**:一个测试覆盖 5 个分支,失败时不知道哪个出问题。要每个分支一个测试。

3. **测试里写逻辑**:`if/else` 出现在测试里,会让测试本身有 Bug。测试应该只描述输入输出。

4. **忽视测试金字塔**:全写 E2E 测试,跑一次要 10 分钟,反馈循环太长。Skill 会强制 80/15/5 比例。

5. **重构时跳过测试**:重构后必须跑测试,不能凭眼睛看代码就觉得对了。

6. **过度 mock**:mock 了一切外部依赖,导致测试和真实环境差异巨大,集成测试一定要做。

## 初级用法

- **新功能开发**:每个新功能都让 AI 走 TDD,产出代码时必然带着测试。

- **Bug 修复**:先写一个能复现 Bug 的测试(必然失败),再修代码,再跑测试通过。这是修 Bug 的金标准。

- **代码重构**:先保证现有测试覆盖,再让 AI 重构,如果有测试遗漏的行为,会被立刻发现。

## 高级玩法

- **覆盖率门槛**:在 Skill 配置里设置 80% 覆盖率门槛,CI 不到 80% 直接 fail。

- **Mutation Testing**:用 `mutmut` 或 `Stryker` 测试你的测试——故意改坏代码,看测试能不能抓到。

- **Property-Based Testing**:Skill 支持 hypothesis(Erlang QuickCheck 风格),让 AI 自动生成边界用例。

## 小技巧

- TDD 的反馈循环要快:每改一处就立刻跑测试,不要攒一堆再跑。

- 测试名要描述"行为"而不是"实现":`test_calculate_total_with_discount` 比 `test_total_method` 好。

- 一个测试只测一件事,失败时你立刻知道问题在哪。

- 不要测试 private 方法:private 是实现细节,公开行为变了再改测试。

- 重构时记得用 IDE 的 rename、extract 等自动化操作,不要手动改字符串。

## 常见问题 FAQ

**Q1: 这个 Skill 跟 obra-test-driven-development 有什么关系?必须装吗?**

A: Skill 是给 AI Agent 用的"技能包",能告诉 Agent 怎么按特定规范工作。**不是必须装**——如果你的项目规模小、要求不高,不装也能用。但装上能让 Agent 输出的质量更高、更符合最佳实践,推荐装。

**Q2: 这个 Skill 适合哪些 AI Agent?Cursor?Claude Code?其他?**

A: obra-test-driven-development 来自 Obra,主要面向支持 Skill 机制的 Agent。常见兼容 Agent 包括 Claude Code、Cursor、OpenCode、Windsurf 等。具体兼容性请查 Skill 官方文档。

**Q3: 装了这个 Skill 后,会拖慢 Agent 响应吗?**

A: 会的——Skill 通常会增加 prompt 长度,导致响应变慢、token 消耗增加。但质量提升明显。建议:1) 只装项目必需的 Skill;2) 用 Skill 启动/加载/卸载机制按需加载;3) 定期清理不用的 Skill。

**Q4: 怎么验证 Skill 装对了?**

A: 在 Agent 中输入"列出已加载的 Skill"或类似命令。如果 Skill 出现在列表里,说明装对了。然后用 Skill 跑一个相关任务,看输出是否符合 Skill 规范。

**Q5: 这个 Skill 有许可证吗?能商用吗?**

A: 取决于 obra-test-driven-development 的许可证。常见许可证包括 MIT(完全自由)、Apache-2.0(自由但有专利条款)、源可用(可看不能用)、GPL(强开源)。商用前请查仓库 LICENSE 文件。

test-driven-development Skill 多维度简评

来源:obra/superpowers 类别:测试工具 / TDD 强制


一、核心定位与价值

这是 superpowers 的核心纪律——很多 AI 跳过”写测试”这一步,test-driven-development Skill 用强制状态机让 AI 没办法跳过。


二、核心机制:TDD 循环

🔴 RED: 写失败测试 → 验证失败正确
🟢 GREEN: 写最小代码 → 验证全部通过
🔵 REFACTOR: 清洁重构 → 验证仍然通过
    ↓
下一个测试

铁律

在失败的测试之前,不写生产代码。

为什么”强制”?

普通 Prompt 的问题

你说”请用 TDD 方式开发”,AI 点头称是,然后依然直接写实现。

superpowers 的做法

把流程编码在 Skill 的状态机里——AI 必须按顺序走:

  • 不写失败测试 → 不能写实现代码
  • 实现代码后必须看到测试变绿
  • 红-绿-重构必须完整循环

红线规则:如果发生以下任何情况,删除代码,用 TDD 重新开始

  • 在测试之前写了代码
  • 实现之后才加测试
  • 测试立即通过(说明测试没真正测试什么)
  • 无法解释为什么测试失败
  • “以后再加测试”
  • 合理化”就这一次”

三、3 阶段实战详解

🔴 RED:写失败测试

做什么:写一个会失败的测试,验证它失败得正确

示例

// test/calculator.test.ts
import { add } from '../src/calculator'

describe('add', () => {
  it('adds two positive numbers', () => {
    expect(add(2, 3)).toBe(5)  // ❌ 失败:add 还没实现
  })
})

验证失败正确

FAIL: add adds two positive numbers
Error: add is not a function

正确:失败原因是”函数不存在”,不是语法错误或其他问题。

🟢 GREEN:写最小代码

做什么:写最小的代码让测试通过。

示例

// src/calculator.ts
export function add(a: number, b: number): number {
  return a + b
}

不要过度

// ❌ 错误:写了 100 行实现,但测试只覆盖了 + 操作
export function add(a: number, b: number): number {
  // 100 行复杂逻辑...
}

TDD 原则只写让测试通过的最小代码

🔵 REFACTOR:清洁重构

做什么:在测试通过的前提下,改进代码质量。

重构原则永远不要在重构时改变行为


四、3 个测试反模式(Anti-patterns)

❌ 反模式 1:测试实现细节

// ❌ 测试了私有方法
expect(calculator._add).toBe(5)

// ✅ 测试公开行为
expect(calculator.add(2, 3)).toBe(5)

❌ 反模式 2:测试间共享状态

// ❌ 全局变量
let user: User
beforeAll(() => { user = createUser() })

// ✅ 每个测试独立
beforeEach(() => { user = createUser() })

❌ 反模式 3:测试名不清晰

// ❌
it('test 1', () => { ... })
it('works', () => { ... })

// ✅
it('returns 5 when adding 2 and 3', () => { ... })
it('throws error when input is negative', () => { ... })

五、5 条反合理化(Anti-rationalization)

借口反驳
”这代码太简单,不用测”简单代码也会引入 bug,TDD 不挑难度
”我之后再补测试”TDD 反对这种”之后”,现在必须
”测试代码不是生产代码”测试代码同样是工程资产
”写测试浪费时间”调试浪费时间,写测试节省更多
”这是原型代码”原型也会变生产,提前测试

六、与其他 Skill 配合

test-driven-development 是 superpowers 工作流的第 5 步

brainstorming(设计)
    ↓
writing-plans(计划)→ TDD 是计划中的核心环节
    ↓
subagent-driven-development(执行)
    ↓
test-driven-development(TDD)
    ↓
requesting-code-review(审查)

每个任务都必须走完整 TDD 循环


七、安装

# superpowers 套装
/plugin install superpowers@claude-plugins-official

# 单独使用
npx skills add obra/superpowers --skill test-driven-development

八、6 条实战建议

  1. 不要跳步:每个循环都要完整 RED-GREEN-REFACTOR
  2. 测试名要清晰:能看出测试什么场景
  3. 不要测实现细节:只测公开行为
  4. 不要共享状态:每个测试独立
  5. 覆盖率不是目标:质量才是
  6. Bug 修复也是 TDD:先复现成测试,再修

九、常见 Q&A

Q: 100% 覆盖率必须吗? A: 不是目标。重要业务逻辑要 100%,UI/工具函数可以适度。

Q: 测试越多越好? A: 不是。重复测试、无效测试反而拖累。

Q: 重构时要不要改测试? A: 重构保持行为不变时,测试不需要改。如果改了,说明行为变了,需要重新审视。

Q: 性能测试怎么办? A: 性能测试不是 TDD 的目标,用专门的 benchmark。

Q: TDD 适合 UI 代码吗? A: 适合。用 React Testing Library 测试组件行为。


十、总结

test-driven-development Skill 是 AI 编程从”写代码”到”做工程”的关键纪律

核心价值

  • 强制红绿重构循环
  • 防止 AI 跳过测试
  • 提高代码质量

适用人群

  • ✅ 严肃工程项目
  • ✅ 团队规范化
  • ✅ 长期维护项目

本文基于官方文档和公开资料整理,未经过 MagicNetWorld 实测。

参考资料

📊 评分与标签

评分说明

总分 9.6/10 · P_优选

📊 可观测社区指标(数据核验日期:2026-07-07)

  • GitHub: addyosmani/agent-skills ★71.6k
  • License: MIT · LICENSE
  • Commits: 308 · Forks: 7.7k · Issues: 55 · PRs: 88
  • 官方描述: 红-绿-重构流程,测试金字塔 80/15/5,Beyonce 规则,让 AI 写带测试的代码

📦 可安装性 2.5/2.5

  • git clonecp -r 到技能目录即可使用,零编译零 API Key
  • 支持 Claude Code、Cursor、Codex、OpenCode、Gemini 等多平台安装
  • 竞品对比 1:trailofbits/skills 需手动挑选单个 Skill,test-driven-development 随 agent-skills 套件一键安装
  • 竞品对比 2:anthropics/skills 通过官方 Skills API 装载,集成方式不同但门槛类似

🎯 实用性 2.5/2.5

  • 强制 Red-Green-Refactor 流程:先写失败的测试(Red),写最少代码通过(Green),再重构(Refactor)
  • 内置测试金字塔 80/15/5:80% 单元测试、15% 集成测试、5% E2E 测试,AI 自动按比例生成
  • Beyonce 规则:“If you like it, you should put a test on it”——写一行代码就必须写一个测试
  • DAMP 优于 DRY:测试代码中描述性比简洁性更重要
  • 竞品对比 1:writing-plans 偏任务拆解,test-driven-development 解决的是”代码是否正确”问题
  • 竞品对比 2:systematic-debugging 偏事后调试,test-driven-development 做事前预防

📖 文档质量 1.8/2.0

  • Addy Osmani(Google Chrome 工程总监)官方维护,README 完善含安装和使用说明
  • Skill 目录附独立 SKILL.md 描述触发条件、TDD 流程和测试策略
  • 仓库含完整的 skill evals 评估框架(three-tier eval framework)
  • 竞品对比 1:anthropics/skills 文档架构类似但侧重产品化教程
  • 竞品对比 2:obra/superpowers 文档风格偏工程方法论,addyosmani 偏前端工程实践

👥 社区活跃 1.5/1.5

  • GitHub ★71.6k(agent-skills 仓库整体),308 Commits,7.7k Forks
  • 社区规模极大,由 Google Chrome 工程总监 Addy Osmani 维护,更新频率极高(11 小时前最新 commit)
  • 竞品对比 1:trailofbits/skills ★6k,社区体量约为本仓库 1/12
  • 竞品对比 2:obra/superpowers ★248k,社区规模更大但偏全栈方法论

🔗 兼容性 1.3/1.5

  • MIT 许可完全自由商用
  • 兼容 Claude Code、Cursor、Codex、OpenCode、Gemini 等主流 Agent
  • 与其他 agent-skills 子 Skill 无缝联动
  • 竞品对比 1:trailofbits/skills CC-BY-SA-4.0 有传染性要求,MIT 更宽松
  • 竞品对比 2:anthropics/skills Apache-2.0,专利条款对企业更友好

评分依据可追溯至公开来源,每项分数均有明确理由和数据支撑。

🏷️ 标签说明

📋 来源与核验记录