| name | test-driven-dev |
| description | Use when implementing logic, fixing bugs, or changing behavior. Enforces strict RED-GREEN-REFACTOR cycle with the test pyramid (80/15/5) and Beyonce Rule — tests before code, always. |
| triggers | ["tdd","test","测试","单元测试","unittest","bug fix","修bug","implement","实现","refactor","重构"] |
| version | 1.0.0 |
| author | Ow1onp |
测试驱动开发 (Test-Driven Development)
1. 概述
TDD 不是关于测试——是关于设计。先写测试迫使你在写代码之前就思考接口、边界和错误处理。结果是更清晰的设计、更少的 bug、更高的重构信心。
与 Hermes Agent 深度集成:利用 delegate_task 并行执行测试套件,利用 terminal 实时运行测试,利用 /curator 追踪测试质量趋势。
2. 核心流程
2.1 RED → GREEN → REFACTOR 循环
RED GREEN REFACTOR
写一个失败的测试 → 写最小代码让测试通过 → 清理实现 → 重复
↓ ↓ ↓
测试 FAIL 测试 PASS 测试仍 PASS
RED 阶段铁律:测试必须先失败。
- 如果测试一开始就通过,要么是测试写错了,要么是功能已存在。
- 必须亲眼看到红色(失败),才能信任绿色(通过)。
2.2 测试金字塔与 Hermes 并行执行
╱╲
╱ ╲ E2E (5%) — delegate_task 被 Hermes 自动分派
╱ ╲
╱──────╲ 集成测试 (15%) — terminal 工具直接执行
╱ ╲
╱──────────╲ 单元测试 (80%) — 毫秒级,本地即时反馈
╱ ╲
╱──────────────╲
2.3 Prove-It 模式(Bug 修复专用)
1. 写一个复现 Bug 的失败测试
2. 确认测试失败 → Bug 确凿存在
3. 实现修复
4. 确认测试通过 → Bug 已修复
5. 运行全量测试 → 无回归
def test_complete_task_sets_completed_at():
task = create_task(title="Test")
completed = complete_task(task.id)
assert completed.status == "completed"
assert completed.completed_at is not None
def complete_task(id: str) -> Task:
return db.tasks.update(id, {
"status": "completed",
"completed_at": datetime.now(),
})
2.4 Hermes 工具链集成
terminal(command="pytest tests/ -v --tb=short", timeout=120)
delegate_task(
goal="Run integration tests for auth module",
context="Run: pytest tests/integration/test_auth.py -v",
toolsets=["terminal", "file"]
)
2.5 自进化机制
- 测试质量评分:追踪测试的 "杀虫剂效应"——如果一个测试运行 50 次从未失败,它可能过于宽松
- 覆盖率盲区检测:自动识别项目中测试覆盖率最低的模块,建议优先补测
- 测试模式库:积累项目特定的测试模式(如 "所有 API 端点必须有 401 测试")
- 反馈优化:如果某类 Bug 反复出现,建议增加对应的测试场景
2.6 身份感知
- 读取
SOUL.md 中的代码风格偏好
- 测试命名风格跟随 SOUL 定义(如
should_xxx vs test_xxx vs it_xxx)
- 断言风格适配(assertive vs descriptive)
3. 门禁标准
4. 常见逃避借口与反驳
| 借口 | 反驳 |
|---|
| "这个太简单了,不需要测试" | "太简单" 是 bug 最喜欢的藏身之处。简单的 getter 今天可能变成复杂逻辑的明天。 |
| "测试写起来太慢了" | 不写测试的代码快 30%,但调试慢 300%。总时间算下来,TDD 更快。 |
| "我先写代码,之后再补测试" | "之后"永远不会来。这是软件工程最大的谎言之一。 |
| "AI 写的代码不需要测试" | AI 写的代码更需要测试——AI 没有 "这看起来不对" 的直觉。 |
| "测试跑得太慢" | 慢的是集成/E2E 测试,不是单元测试。80% 的单元测试应该在毫秒级完成。 |