代码覆盖率是一个用来计算你的单元测试覆盖率的工具。高水平的覆盖率会给您的单元测试带来信心,并表明您的应用程序已经过全面测试。你可能写了上千个单元测试,但是如果覆盖率不高,那么你写的那套测试可能没有多大价值。这里没有确切的百分比,你必须达到这个覆盖率。这在很大程度上取决于您的项目。比如你的项目有很多可视化组件,无法进行单元测试,那么覆盖率会比只处理数据的框架低很多。Xcode中的代码覆盖率以前,如果你想做一个测试代码覆盖率报告,你需要设置很多[选项]。它非常复杂,很多都需要手动设置。在iOS9中,Apple提供了一个智能代码覆盖工具,它与LLVM集成,每次运行测试时都会调用和计算。使用代码覆盖工具现在我们用一个例子来说明如何使用新的代码覆盖工具以及如何改进现有的测试用例。完成的代码在Github上,你可以跟着做。首先要做的是创建一个新项目并确保选中单元测试选项。这将根据需要创建一个默认项目,现在我们需要测试一些东西。这个测试可以是任何你想要的,这里我添加一个空的swift文件,其中包含一个全局方法。此方法检查两个字母字符串是否是相同字母的单词,只是顺序不同。写一个全局方法可能不是一个好的设计,但这里我们只是演示一下。这是一种相对简单的方法,因此我们可能会毫无问题地获得100%的测试覆盖率。checkword编写完算法后,就该编写测试了。打开创建项目时默认创建的XCTestCase,添加如下简单测试方法。他看起来像这样。在运行测试之前,我们首先要确认是否开启了代码覆盖率。写代码的时候默认是关闭的。所以你需要编辑你的测试方案来打开它。打开覆盖确保“Gathercoveragedata”被选中,然后点击关闭按钮运行测试目标。我们希望刚刚创建的测试用例能够顺利通过。Coverage选项卡一旦该测试通过,您就知道checkWord方法至少有一个路径。但是你不知道的是,还有很多没有经过测试。这就是代码覆盖工具的好处。当你打开代码覆盖选项卡时,你可以清楚地看到测试的覆盖率。它们按目标、文件、函数自动分组。打开Xcode左侧窗口中的ReportNavigator面板,然后选择刚刚运行的测试。然后在选项卡中选择Coverage。测试覆盖率面板这将显示您的类和方法的列表,并指出每个类和方法的测试覆盖率。如果将鼠标悬停在checkWord方法上,您可以看到测试覆盖率为28%。我不能接受!我们需要找出哪些代码分支可以被测试执行,哪些不能,然后改进它们。双击方法名,Xcode会打开类的代码,可以看到代码覆盖率。覆盖结果的白色区域表示代码被测试覆盖。灰色区域没有被测试覆盖,我们需要增加更多的测试用例来覆盖代码的灰色部分。右侧的数字表示这些代码块在此测试中执行的次数。提高覆盖率显然,28%的覆盖率不是我们的目标。这里没有UI,这似乎是编写测试用例的完美候选者。所以,我们添加一个测试用例。理想情况下,我们希望每个分支都经过测试。这样就实现了完全覆盖。将以下测试用例添加到您的测试类中。测试用例这些测试用例应该能够完全覆盖我们的代码。运行单元并打开最后的测试报告。最后的覆盖结果我们成功了,100%的覆盖率。可以看到整个代码都变白了,右边的数字也说明每个代码段至少执行了一次。使用代码覆盖率是帮助您构建真正有价值的测试套件的好方法。比编写大量测试用例但不真正测试代码要好得多。Xcode7使这变得非常简单,我建议您在项目中启用代码覆盖率。即使您已经编写了测试,它也可以帮助您了解测试的编写情况。要阅读有关Xcode7中代码覆盖率工具的更多信息,我建议您观看WWDC2015中的session410ContinuousIntegrationandCodeCoverageinXcode。***不要忘记,如果您想尝试我们上面的示例,您可以找到在Github上找到他。
