Back to Blog
·1 min read

绿色 CI 和「核心流程从没被跑过」可以同时成立。 一个很常见的盲区:单元测试全…

绿色 CI 和「核心流程从没被跑过」可以同时成立。 一个很常见的盲区:单元测试全绿、构建全绿,但整个 App 存在的理由——用户打开后真正要完成的那条主流程——从来没有任何测试驱动

绿色 CI 和「核心流程从没被跑过」可以同时成立。

一个很常见的盲区:单元测试全绿、构建全绿,但整个 App 存在的理由——用户打开后真正要完成的那条主流程——从来没有任何测试驱动过它。组件各自没问题,不代表产品能用。

为什么它会一直隐身: 门禁检查的是「测试通过了没有」,而不是「该有的测试存在没有」。没有测试文件,就没有失败的测试;没有失败,就没有红灯。一个空集合的通过率永远是 100%。同类的坑还有 TEST SUCCEEDED 配 Executed 0 tests——结论是关于「什么都没有」的结论。

修复的顺序很重要: 1. 先搭骨架:建好 UI 测试目标和一个能真正启动 App 的空壳用例,确保它能被构建、被发现、被执行(先看到 Executed 数 ≥ 1)。 2. 再填内容:把真实的主流程(导入 → 操作 → 得到结果)写进去,断言最终的可见结果,而不是中间调用了某个 API。 3. 最后加门禁:让「核心流程测试文件不存在」本身成为一个失败,而不是默认通过。 顺序不能反:先写断言再搭环境,你分不清失败是流程坏了还是脚手架没起来。

一分钟自测:

  • 说出你产品最重要的那一条用户路径,然后在测试目录里找到驱动它的那个用例。找不到,就是没覆盖。
  • 故意把这条路径弄坏(比如让导出直接返回空),跑一遍测试套件。还是绿的?那你的绿色不代表什么。
  • 看测试输出里的 Executed N tests——N 是多少,比「SUCCEEDED」更有信息量。
#build-log

Written by

Peter Zhang

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