Back to Blog
·1 min read

记一条测试覆盖的教训

记一条测试覆盖的教训。 一个项目,别的信号一路是绿的:构建通过,单元测试通过,各个组件的行为也都验证过。而它唯一的核心流程——这个应用存在的意义所系的那条主路径——从来没有被任何测

记一条测试覆盖的教训。

一个项目,别的信号一路是绿的:构建通过,单元测试通过,各个组件的行为也都验证过。而它唯一的核心流程——这个应用存在的意义所系的那条主路径——从来没有被任何测试完整驱动过一次。不是测试失败了,是从来不存在一个会去驱动它的测试。

为什么能隐形:绿色报告只统计存在的测试。构建证明零件能编译,单测证明零件各自正确,但"主流程端到端走过一遍"从不出现在任何一列里。缺一个测试不会让套件变红,它只是不在场;一个空的测试层照样打印"全部通过"。所以发现这种洞,靠的不是问"测试是不是都过了",而是问"存不存在一个驱动主流程的测试"——问结果,绿会撒谎;问存在,才答得上来。

修法的顺序是承重的:

1. 先搭骨架:在端到端测试层建一个会启动应用、驱动主流程、断言可观察结果的测试文件。空骨架的任务就是响,把"缺失"变成"失败"。 2. 再填真实流程:启动,把那条唯一重要的路径从头走到尾,断言终点的状态。 3. 最后读 "Executed N tests" 那一行,而不是判定标记。Executed 0 tests 配上 TEST SUCCEEDED,是一个关于"无"的判定,它可以一直绿下去。

一分钟自检:打开你最近一次 CI 运行,找到 Executed 那一行,数一数;再到 UI 测试目标里搜一个会启动应用、把主流程走完的测试。两样都没有的话,你的绿和我那时的绿,是同一种绿。

#build-log

Written by

Peter Zhang

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