测试先行(TDD 红 → 绿 → 重构)
测试是退出标准——红转绿才算完,不是智能体说「写好了」就算完。
前置:存在经人确认的 spec(如 spec/<feature>_spec.md)。没有就先走 sdd-spec。
红:只写测试,不写实现
- 正常路径:每个端点至少 1 条。
- spec「边界」小节:每条 1 条(空 / 极值 / 重复 / 不存在 / 冲突)。
- 断言要具体:状态码、返回体字段与值;不要只断言「不报错」。
- 立即运行测试,确认全红,且失败原因是缺少实现。若有测试在无实现时直接通过,说明测试写错或测了无关行为,先修测试。
绿:补实现,一个端点一个循环
- 一次只实现一个端点,跑至全绿再开下一个。禁止一次性生成整个服务。
- 中途有红:回喂失败的具体断言 + 触发输入 + 期望值(例:
test_blank_title_rejected_422红,输入" ",期望 422),不要只说「有 bug」。 - 不允许注释、跳过或删改失败测试来凑绿。若发现是规格本身写错,回头改规格并同步测试。
重构:测试保持绿
- 全绿后才允许清理实现;每小步重构后立即跑测试,必须保持全绿。
- 不为通过类型检查或 lint 加无意义抽象。
兜底验证(变异检查)
流程末尾故意改坏一处实现(如放宽长度上限、把 404 改成 200),对应测试必须立刻变红。 变不红 = 这条行为没被测住——先补测试,再还原实现。
完成判据
- spec 的每条规则 / 边界都有对应测试且全绿;
- 变异检查通过;
- 测试命令已实际运行验证(如
python -m pytest -q),结果真实,而非口头声称。
Scan to join WeChat group