覆盖率(Coverage)

写了单元测试之后,我们下一步就会想要计算覆盖率。所谓覆盖率就是我们的单元测试覆盖了程序的多少比例,也就是,有多少程式被测试到、以及没有被测试到。当我们发现有程式没有被测试到之后,便进一步撰写更多的test case,确保我们的程式经过完整测试。

Xcode 7

Xcode 7 当中直接包含计算覆盖率的功能。要在Xcode 7 中显示覆盖率,首先是在Scheme 中,勾选"Gather Coverage Data"。

接着,在执行单元测试的时候,就可以看到有一个显示Coverage 的分页,显示每个档案的覆盖率是多少。

选择任一档案编辑,便可以看到在画面的最右方,可以看到每行程式在test case 中被执行了几次,如果没有执行到(执行次数为0),背景就会变成红色,提醒我们应该要对这部份写单元测试。

Xcode 6

要让Xcode 6 帮我们产生覆盖率报告,我们要调整一下Xcode 里头的Project设定,将Build Setting 下Apple LLVM 区段的三项设定设成YES。分别是:

  • Generate Debug Symbol
  • Generate Test Coverage File
  • Instrument Program Flow

这三项设定的位置如下图:

Xcode产生出来的覆盖率报告格式为.gcno档案,但档案产生出来的位置预设会在不是很容易找到的地方。这个档案会出现在编译专案时产生的Intermediates目录下,如果你没有改过Xcode偏好设定中Locations -> Derived Data的目录设定的话,并且使用iOS模拟器执行测试的话,要寻找.gcno档案,位置大概是:

  • 首先进入你个人目录下的~/Library/Developer/Xcode/DerivedData 目录

继续进入<Project Name>-<一串代码>/Build/Intermediates/<Project Name>.build/Debug-iphonesimulator/<Project Name>Tests.build/Objects-normal/i386目录。比方说,我的Project名称叫做SillySnake,我就在~/Library/Developer/Xcode/DerivedData/SillySnake-dccqebabizkqeabeylczwkqwwbzj/Build/Intermediates/SillySnake.build/Debug-iphonesimulator/SillySnakeTests.build/Objects-normal/i386目录下,找到了对应的文件目录下,找到了对应的文件

找到对应的档案之后,我们可以用gcov这个command line工具开启、阅读.gcno档案,不过,如果有GUI工具那就更理想了;我们可以用coverstory这套open source的工具浏览.gcno档案。

在画面的左方,会列出这次测试中,测试了哪些档案,以及每个档案的测试覆盖率。在画面的右方则是程式码,有测试到的程式会以黑色显示,没有测试到的程式则会有红色显示。

results matching ""

    No results matching ""