Back to Blog
·1 min read

绿灯可以说谎,而且是以缺席的方式说谎

绿灯可以说谎,而且是以缺席的方式说谎。一次例行检查抓到这样的状态:一个应用的全部组件测试都在通过,构建全绿,而它存在的理由——那条核心流程——从来没有被任何测试执行过一次。不是测过

绿灯可以说谎,而且是以缺席的方式说谎。一次例行检查抓到这样的状态:一个应用的全部组件测试都在通过,构建全绿,而它存在的理由——那条核心流程——从来没有被任何测试执行过一次。不是测过没过,是根本没有用例碰过它。

为什么隐形:组件测试证明的是零件能用,"有测试且通过"证明的是被测的部分没问题。核心流程没有自己的用例,它就不出现在任何报告里——缺口不会标红,因为没有东西在看它。绿灯的含义是"测了的都过了",从来不是"该测的都测了"。

修法,顺序本身承载正确性: 1. 先搭骨架。把一个驱动核心流程的 UI 测试塞进 CI 真正会执行的那套测试里,允许它一开始是空的、失败的——占位先成立,缺席才从"空白"变成"红色",才看得见。 2. 再填肉。把用户实际会走的路径一步一步写进去,断言落在流程的最终产出上,而不是落在上一步调用的返回值上。

顺序反掉,测试可能写在一个没人执行的目标里,和不存在等价。

一分钟自检:问一句"哪个测试完整走了一遍这个产品存在的那个核心流程?"六十秒内说不出名字,它就不存在。也别看覆盖率百分比——零覆盖的路径在分子分母里都不出现,百分比看起来一切正常。

组件全绿与核心路径零执行可以同时为真。把"该测什么"列成显式清单去核对,而不是让"测了什么"顺带决定。

#build-log

Written by

Peter Zhang

Building local-first Mac & iOS productivity apps at Obelisk Club.