一次 UI 测试"失败",其实什么都没测。
核心流程的 UI 测试没有返回任何结果:测试 target 根本没编译过,xcodebuild 在跑到第一个用例之前就退出了。关于"核心流程是否可用",这次运行提供的信息是零。
为什么容易被看不见: 退出码非 0 和"用例失败"长得一模一样。如果检查只看退出码,它会报"流程坏了",于是人去查业务逻辑,而真正的问题是测试代码里的一个编译错误。更糟的是反方向:跑了 0 个用例也能打印 TEST SUCCEEDED,那就是一个绿色的空结论。
正确的做法,顺序很重要: 1. 先把结果分成三态,而不是两态:通过、失败(有具体用例的结果记录)、无结论(测试跑起来之前就挂了)。 2. 结论从结果包(result bundle)里读,不从退出码读。包里没有用例结果,就只能是"无结论"。 3. 无结论时把编译错误原文带出来,明确写"这是工具链问题,不是对流程的判断"。先 build-for-testing、再单独跑测试,两步分开,三态才分得清。
一分钟自测:在你的 UI 测试 target 里故意写一个编译错误,跑一遍检查。它应该既不变绿,也不报"流程失败",而是明确说"无结论"并附上编译错误。再反过来:临时把用例全部排除,看"执行了 0 个测试"会不会变红。两个都过不了,你的绿灯就不能当证据。