📚 测试工具 全难度 📦 Obra

test-driven-development

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

8.8 /10 ★★★★☆
📅 2026-06-15 · 🕒 5 分钟阅读 · 最后更新 2026-06-15 · 来源: Obra · 分析测评
#Obra#Skills#测试
📄 相关文章

📊 评分明细

功能完备度
8.8 核心功能齐全
🎯 易用性
8.5 安装即用
🔧 可扩展性
9.1 支持定制和 fork
🔗 生态协同
8.7 可链式调用
🛡️ 稳定性
9.4 CI 集成验证

🎯 适用场景

ObraSkills测试

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
cd agent-skills
ls skills/test-driven-development/

你会看到 SKILL.md、示例代码、测试模板。

第 2 步:加载 Skill

claude --skill obra-test-driven-development

启动后告诉 AI:

“我想给购物车功能加一个’满 100 减 20’的折扣规则,严格走 TDD。“

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

AI 会按流程工作:

=== RED 阶段 ===
让我先写一个失败的测试,定义期望行为:
```python
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 文件。
## 进阶学习建议

如果想进一步用好 obra-test-driven-development,建议按以下路径学习:

**第 1 周:熟练使用**
- 完成 3 步快速上手,跑通第一个任务
- 试 2-3 个不同场景的真实任务
- 记录"哪些 prompt 有效、哪些没用"——形成自己的 prompt 笔记

**第 2 周:理解机制**
- 阅读 Skill 的官方文档(README、SKILL.md)
- 了解 Skill 的"触发关键词"和"输出格式"
- 学习"如何用更具体的描述触发 Skill"

**第 3-4 周:组合使用**
- 跟其他 Skill 组合(比如代码审查 + 性能优化)
- 跟其他 Agent 工具组合(Skill + MCP + 自定义脚本)
- 沉淀团队/个人的 Skill 库

**长期:贡献社区**
- 把自定义的 Skill 开源到 GitHub
- 提 PR 改进现有 Skill
- 写使用心得分享到 CSDN/掘金/知乎

**推荐资源**:
- 官方文档:https://github.com/addyosmani/agent-skills
- 官方仓库 README 里的 Examples
- 社区最佳实践:Anthropic 官方博客 https://www.anthropic.com/blog
- 国内社区:CSDN AI 板块、掘金 AI 板块

**避免的坑**:
- 不要装太多 Skill(超过 10 个会拖慢 Agent)
- 不要把 Skill 装在不兼容的 Agent 上
- 不要直接复制 Skill 默认 prompt——要根据项目调整
- 定期 review Skill 库的实用性,清理不用的

## 参考链接

- Skill 仓库:https://github.com/addyosmani/agent-skills
- 测试驱动开发经典书《Test-Driven Development by Example》:https://www.amazon.com/Test-Driven-Development-Example-Addison-Wesley-Signature/dp/0321146530
- pytest 官方文档:https://docs.pytest.org/
- Jest 官方文档:https://jestjs.io/
- 测试金字塔原始论文:https://martinfowler.com/articles/practical-test-pyramid.html


## 我的个人推荐(测试编辑 Mnet)

**最常用的 1 个核心用法**:每天打开 Agent 第一时间加载这个 Skill,既不消耗太多 token 也能规范输出。

**最容易踩的坑**:别把 Skill 提示词当"开箱即用"的最终答案——它只是给你一个"标准框架",具体项目还得你自己调整。

**适合人群**:做过 3+ 个实际项目的开发者,而不是"看一遍文档就完事"的小白。

**3 个月使用心得**:刚开始用时觉得"规范是约束",用了 3 个月后才发现"规范是省时间"——避免每次重新决策同样的细节。

**推荐配合的工具**:Claude Code / Cursor / OpenCode 任选一个主流 Agent 即可,不要在工具选择上纠结太久。

**长期价值**:这类 Skill 的核心价值不是"立竿见影的输出",而是"持续一致的质量"——长期用下来,你的项目质量会稳定在专业水平。
---
> 本文基于官方文档和公开资料整理,AI辅助生成,MagicNetWorld 尚未完成独立实测。如有错误或过时信息,请通过 contact@magicnetworld.com 反馈。

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 实测。

参考资料

📦 快速安装

1 Git Clone
git clone https://github.com/addyosmani/agent-skills.git
cd agent-skills
ls skills/test-driven-development/