绿灯撒谎的一种方式:围绕边缘的测试全部通过,而产品存在意义所系的那条核心流程,从未被任何测试执行过。
最近撞见的形态:一个项目 UI 测试 target 齐全、构建全绿,但翻遍测试目录,没有一条用例从头到尾驱动过核心流程——用户装这个 App 要完成的那件事,从启动到完成,没有一行测试代码走过。它能一直存活,机制并不神秘:绿只说明"没有红",不说明"主干被验证过"。边缘部件的测试每条都诚实地通过,合起来却对中间的主干保持沉默;而"核心流程没有覆盖"不被任何检查视为失败态,于是缺失本身不产生信号,直到有人专门去找。
修这个洞的顺序是承重的:
1. 先搭骨架,不急着写内容。第一版端到端测试只要:启动 → 走到核心界面 → 做一次这个 App 存在所要支持的那个操作 → 断言结果。骨架先证明测试基础设施能跑——一条永远不会被执行的测试什么都证明不了。 2. 骨架活了,再填真实流程:分支、失败态、边界输入。 3. 最后把缺失变成失败:核心流程的端到端用例不存在,检查就得红。缺覆盖应该是响亮的红,不是安静的绿。
一分钟自检:在脑内删掉核心流程的实现代码,CI 还绿着,就说明你对最重要那条路径的覆盖是零。顺带读一下测试输出里的 "Executed N tests" 那一行,而不是只看 SUCCEEDED——跟着 SUCCESS 出现的 "Executed 0 tests" 什么也没裁决。
对部件的周全,替代不了对主干的验证:绿是"没发现错",从来不是"对过"。