核心流程零覆盖,绿色 CI 是看不出来的。
一个 app 的主路径——用户打开它就是要走的那条路——可以从头到尾没有被任何测试执行过,而所有检查都是绿的:单测测的是各个模块,构建过了,审查过了。没有哪一层会为“核心流程从未被驱动过”报错,因为这个缺陷的形状是“缺一个不存在的东西”,不是“某个存在的东西坏了”。它也不会自己暴露,只有显式去问“哪个测试驱动过主路径?”才会现形。而测试天然长在好测的地方:helper、解析器、view model 都是纯逻辑,用例好写;主路径要启动 app、要点按、要等异步,写起来贵,于是一直没人写。绿的含义只是“零件都好”,从来不是“产品能用”。
修复的顺序是承重的:
1. 先搭骨架:给核心流程建一个空的 UI 测试。这一步把不可见的事实变成可见的信号——从现在起,“没测过核心流程”会红,而不是沉默。 2. 再填真实的用户路径:启动 app,按用户真实的顺序走完主路,断言终点状态——该出现的界面出现了,该产出的结果产出了;不是断言“某个方法被调用过”。 3. 外围单测最后补:先有端到端的红绿,再有模块级细化。顺序反过来,你可以在一片绿里发布一个主路径从未跑通的产品。
一分钟自检:打开你的 UI 测试目录,问“哪个测试驱动了这个 app 存在的理由?”答不上来,就是零覆盖;更机械的版本:数一下测试代码里 XCUIApplication().launch() 出现的次数,为零就是零,和构建绿不绿无关。