一路绿的测试套件,和一条从未被执行过的主流程,可以同时为真。
又一次见到这个形状,值得记一遍:不是哪个测试挂了,而是那个本该存在的测试从来没被写过——应用的核心流程,用户打开它要完成的那件事,没有在任何测试里被完整走过一遍。构建绿、单测绿、组件级检查全绿,因为它们回答的都是"零件好不好",没有一个在回答"产品能不能用"。
它为什么一直隐形:缺席不会失败。套件只对存在的测试给出红绿,一条从未被写下的测试永远不可能红,于是"主流程零覆盖"和"全部通过"在面板上是同一种颜色。更麻烦的是,边缘测试越多、越绿,空洞反而越像被盖住了——绿灯的数量会制造覆盖率的幻觉。
修法里,顺序是承重的:
1. 先搭骨架。建一个空壳流程测试:启动应用、沿真实主路径走、断言到达终点,先让它进套件、进 CI。空壳的价值是把"缺席"变成套件看得见的槽位——从这一刻起,"主流程没被执行过"这件事有了会红的载体。 2. 再填真流程。把真实用户旅程一步步填进骨架。顺序不能反:先去补更多边缘单测,只会让绿灯继续堆在空洞上面;骨架先行,之后的每一步都发生在"核心流程确实跑过"的前提之下。 3. 确认它真的在执行。看输出里 Executed N tests 那一行,而不是成功标记——一块执行了 0 个测试的绿灯,什么都没有证明。
一分钟自检:问自己"如果明天主流程坏了,现有哪个测试会红?"答不出名字,或者诚实的答案是"我手点一遍才知道",那你就是这个问题。再花三十秒看套件输出的 Executed 行,确认那个驱动主流程的测试确实在跑,而不是被静默跳过。