单测全绿和「产品能用」之间,隔着一条从来没人走过的路。
最近复盘到一件事:一个做证书检查的小工具,组件级测试长期全绿,直到某次检查才发现——它的主流程(输入主机名、拿到证书结论)从来没有被任何测试执行过,一次都没有。不是测试挂了,是那个测试根本不存在。
绿色只说明「所有存在的测试都过了」,它对不存在的测试一言不发。主流程不是一个组件,而是一条穿过好几个组件的路径,所以任何组件级检查都碰不到它;构建系统也从不抱怨缺测试,它只抱怨坏测试。组件测试越多,「已经验证过」的错觉反而越厚。
补这个洞的顺序是关键:
1. 先给主流程立一个空壳测试,允许它红着出现——启动 app、走到主流程入口,先只断言这条路走得通。存在先于正确:一个红着的空壳,把缺口从「无人知晓」变成「每天可见」。 2. 再填真实步骤:核心输入、核心动作、对结果的断言。这时你是对着一条被真正驱动的流程写断言,而不是对着记忆写。 3. 最后把它挂进每次构建必跑的那道门,让「主流程零执行」从此不可能静默发生。
顺序反了就会骗人:先填步骤,容易写成「我以为的流程」;先挂门而没有东西可跑,绿色就又在撒谎。
一分钟自查:打开你的测试目录,问自己——哪个文件会启动 app、把主流程从头到尾走一遍、并断言它的结果?十秒内说不出文件名,那么无论测试列表多长,主流程覆盖就是零。
零件都好,不等于机器在转。宣布完成之前,先拿出那条核心路径真的端到端跑过一次的证据。