用途:test-first 用于在预先商定的接缝处按“红—绿”循环构建和修复代码,让循环产出的测试值得长期保留。每条规则在每个循环中都适用,并建议先阅读术语表,使测试命名沿用项目自身词汇。
主要能力(规则要点):TEST-1 接缝在测试前商定,每个候选接缝需一行说明它能捕获什么、遗漏什么,未经确认的接缝不写测试。TEST-2 先红后绿:先写失败测试,再写刚好通过的最小代码,一个接缝、一个测试、一次最小实现,不做投机性功能;重构是绿灯后的独立切片,不属于该循环。TEST-3 期望值来自独立来源:已知正确的字面量、演算示例或规格说明,并在测试中给出推导过程,禁止用 expect(add(a,b)).toBe(a+b) 这类同义重算,只断言范围或符号的测试属于会放过错误数值的类型。TEST-4 只在系统边界打桩:外部服务、时间、随机性、文件系统;不对被测代码、纯函数、值对象或内部协作者打桩,应注入边界,并优先为每个外部操作提供单独函数而非通用 fetcher。TEST-5 以退出码作为门禁:check && test 先行,提交在获得许可后依据退出码放行(just check && git commit);失败被打印却忽略的检查不构成门禁;代码未变而通过后不再为求安心重跑。TEST-6 共享状态的测试套件逐个运行:相同运行之间会变动的数字属于测试框架产物,共享数据库的套件应逐个运行,比较具名失败而非计数。TEST-7 修复前先枚举分支:在改动失败测试前列出代码所走的分支,形状更好的测试常优于打补丁的测试,并用变异检查确认。
好测试的标准:通过公共接口验证行为,读起来像规格说明,例如“用户可以用有效购物车结账”,说明存在何种能力,且因不关心内部结构而能经受重构。
反模式:与实现耦合(打桩内部协作者、测试私有方法、通过旁路验证,重构未改行为即失败);同义反复(断言按代码方式重算期望值);水平切片(先写全部测试再写全部实现,对想象行为的测试对真实变化不敏感),应改为垂直切片:一个测试、一个实现,重复。
配套技能:接口存疑时先调用 deep-modules 确定接缝位置;变异检查与测试评审用 review-change;把每个循环落地为可评审单元用 thin-slices。
限制:资料未提供具体安装命令、平台支持、收费方式或效果数据。