Reference · Model-invoked · Discipline layer

tdd 速查

红 → 绿循环纪律的口袋版:让循环产出值得留下的测试。完整教学见 Lesson 0012; 原文见 SKILL.mdtests.mdmocking.md (叙事版:aihero.dev/skills-tdd)。

一句话

先写一个失败的测试(red),再写刚好够让它通过的代码(green),一次一片,重复。 每一节在每个循环上都适用——循环之前和之中查阅,不是事后

何时伸手

小词汇表

Red → green loop
红绿循环:先写失败测试,再写最小实现让它通过。
Seam(接缝)
你在上面做测试的公共边界:不伸手进内部就能观察行为的接口。测试活在接缝上,永远不顶着内部写。
Vertical slice(垂直切片)
一个测试 → 一份实现 → 重复;每片回应上一片学到的东西。反面是 horizontal slicing。
Tracer bullet(曳光弹)
第一个循环:一个打通单条端到端路径的测试,再向外扩展。不开过头灯——不对还不理解的测试结构下注。
Tautological test(同义反复测试)
期望值用和代码相同的方式算出,结构上必然通过,永远不可能和代码意见不合。
Implementation-coupled(耦合实现)
mock 内部协作者、测私有方法、走旁路验证;信号:行为没变的重构却弄红了测试。

循环三规则

  1. Red before green:先失败测试,再刚好够过的代码;不预判未来测试,不加投机功能
  2. One slice at a time:每循环 = 一条接缝 + 一个测试 + 一份最小实现
  3. Refactoring is not part of the loop:重构属于 review 阶段(code-review),不在循环内

接缝纪律(最硬的一条)

Test only at pre-agreed seams. 写任何测试之前,把要测的接缝写下来并和用户确认;未确认的接缝上一个测试也不写。 标准问句:「What's the public interface, and which seams should we test?」 找接缝用 0005 的深模块词汇;to-spec 上游已画过接缝草图,implement 正文也要求 at pre-agreed seams。

好测试判据(tests.md 五条)

三反模式(背 tell)

模式tell(识别信号)解药
Implementation-coupled行为没变的重构弄红了测试只走公共接口验证行为
Tautological断言恒真,不可能失败期望值换独立真值来源(字面量 15,不是 reduce 现算)
Horizontal slicing一批测试接一批实现垂直切片:一个测试 → 一份实现 → 重复

Mock 纪律(mocking.md)

关系

codebase-design ──词汇──► tdd ──写──► 测试文件 + 最小实现
CONTEXT.md/ADR ──只读──► tdd
implement(User)──内部驱动──► tdd ──收尾──► code-review ──► commit
diagnosing-bugs:平级表亲;硬 bug 走它,回归测试与红绿同源

副作用

下一步

微调入口