# 全绿的 CI 和“主流程零覆盖”可以无限期共存,机制很朴素:测试看板度量的是“存… > 全绿的 CI 和“主流程零覆盖”可以无限期共存,机制很朴素:测试看板度量的是“存在的东西”,而不是“应该存在的东西”。一个从未被写下的 UI 测试不会报任何错——构建成功、单元测试 - Canonical page: https://obelisk.club/blog/build-log-361 - Author: Peter Zhang - Published: 2026-10-11 - Tags: build-log 全绿的 CI 和“主流程零覆盖”可以无限期共存,机制很朴素:测试看板度量的是“存在的东西”,而不是“应该存在的东西”。一个从未被写下的 UI 测试不会报任何错——构建成功、单元测试全绿、每个组件级检查都通过,而这个应用存在的理由所系的那条主流程,一次都没有被执行过。缺席不产生信号,缺席只是缺席。 为什么它隐形:绿色回答的是“跑过的都过了吗”,从来不回答“该跑的都跑了吗”。一个执行了 0 个用例的 UI 测试层照样交出绿色结论——这个“通过”不对任何东西构成证据。所以要看板面更要看 `Executed N tests` 那一行,而不是只读结论标记。 修复模式是先搭骨架,顺序本身是承重的: 1. 先为核心流程建一个空的 UI 测试文件并接进 CI——把“缺席”变成机器可检测的事实; 2. 然后填入真实流程:启动 → 核心动作 → 断言到达的状态,一条完整的端到端路径; 3. 最后才扩展边缘用例和更下层的测试。 顺序反了,要么同时调试骨架和用例两层,要么在容器还不存在时写下永远不会运行的用例。 一分钟自检:打开你最近一次全绿的构建,找到 UI 测试层的 `Executed N tests` 行,然后问一个问题——有没有任何一个用例,真正驱动过“这个应用为之而存在”的那条流程?N 是 0,或者没有任何用例指向主流程,那你就有同一个洞。