一次测试运行会产出两样你关心的东西:哪些测试失败了,以及在哪里。一堵终端输出的墙给了你第一样,却逼你去翻找第二样。LingCode 的测试结果标签把两样一并给你——一个可筛选的通过/失败列表,其中每个失败的堆栈帧都是直达源代码行的可点击链接,外加一个覆盖率开关,显示你的测试实际跑到了哪些行。本文教你如何读懂它。
在底部面板里找到 测试结果(印章带对勾的图标)。如果你想先了解全貌,底部面板总览会把它放在其他八个标签之中一起讲。
在你运行任何东西之前,这个标签显示一个占位提示:"No test results yet",并附带提示 "Run tests from the Test Explorer"。从测试浏览器(Test Explorer)发起一次运行,随着结果陆续返回,标签会填充成每个测试一行。
顶部是一个筛选栏,有四个按钮——All、Passed、Failed、Skipped——每个都显示实时计数(通过为绿、失败为红、跳过为橙)。被选中的筛选项以更粗的字重显示,再次点击它会取消。右侧有一行汇总重申总数(例如 "5 passed, 2 failed")。当一次运行变红时,点一下 Failed,你就一键隐藏了所有通过的测试。
每一行带有一个状态图标(通过为对勾、失败为 ✕、跳过为短横),等宽显示的测试名称,以及右侧以毫秒计的耗时。通过的测试就只有这三样。失败的测试会在下方补上它的失败信息——爆掉的那个断言和堆栈追踪。
这是最省时间的部分。在失败信息里,任何指向你工作区文件的堆栈帧——形如 /path/to/MyTests.swift:42:15——都会渲染成蓝色带下划线的链接。点击它,编辑器就跳到那个确切的文件、行和列。行的右侧还有一个跳转箭头,一键带你到第一个可解析的帧。
那些无法解析到工作区文件的帧(例如系统框架内部)保持为灰色纯文本,并带有 "File not found in workspace" 的提示,所以你永远不会被引去追一条不属于你的路径。在底层,这个跳转复用了调试器用的同一套源代码定位机制,因此能把你精准带到执行失败的地方。
筛选栏的右侧有一个代码覆盖率按钮——一个眼睛图标,在"显示"(强调色、睁眼)和"隐藏"(划掉的眼睛)之间切换。打开它,标签就会呈现上一次运行的覆盖率汇总,叠加显示你的测试实际执行了哪些行。用它来回答绿色对勾回答不了的问题:我的测试真的跑到了我以为它跑到的代码吗? 一个测试可以通过,却从未触及你本想覆盖的那个分支。