2019独角兽企业重金招聘Python工程师标准>>>

Code coverage 是一个计算你的单元测试覆盖率的工具。高水平的覆盖给你的单元测试带来信心,也表明你的应用被彻底的测试过了。你可能写了几千个单元测试,但如果覆盖率不高,那么你写的这套测试可能价值也不大。

这里并没有一个确切的百分比,要求你必须到达这个覆盖率。这很大程度上取决于你的项目(的具体情况)。譬如说,如果你的项目中有很多不能写单元测试的视觉组件,那么覆盖率就会比单纯处理数据的框架要低的多。

Code Coverage in Xcode

在过去,如果你想要制作一个测试的代码覆盖报告出来,需要设置很多[选项]。非常复杂,还有许多需要手动设置。在 iOS 9中,苹果提供了智能的代码覆盖工具,他是和 LLVM 一体的,每次运行测试都会被调用和计算。

Using the Code Coverage Tools

现在我们用一个例子来展示,如何使用新的 code coverage 工具和怎样提升现在的测试用例。完成后的代码放在了 Github 上,你可以跟着做。

第一件事是创建一个新项目,并确认你选上了Unit tests选项。这会按要求创建一个默认项目,现我们需要测试点什么。这个测试可能是你的任意需求,这里我添加一个空的 swift 文件,里面写好了一个全局的方法。这个方法检测两个字母串是否是仅排序不同的相同字母组成的词。写成全局的方法,可能不是好的设计,但这里我们仅演示一下。

这是一个相对简单的方法,所以我们可能会得到一个没有任何问题的,100%覆盖的测试覆盖率。

一旦你写好了算法,就该写个测试了。打开项目创建时已经创建好了的默认的XCTestCase,添加一个下面的简单的测试方法。他看起来是这样子的。

在运行测试之前,我们必须先确认 code coverage 是否被打开了,写代码时,默认是关闭的。所以你需要编辑一下你的测试 scheme,把它打开。

确保"Gather coverage data"是被选中的,然后点击关闭按钮,运行测试的 target. 我们希望刚刚创建的测试用例能够顺利通过。

The Coverage Tab

一旦这个测试通过了,你就能知道 checkWord 这个方法,至少有一条路径是对的。但你不知道的是,还多多少没有被测试到。这就是code coverage这个工具的好处。当你打开code coverage tab后,你可以清楚的看到测试的覆盖情况。他们按找 target, file, function 进行了自动分组。

打开Xcode左边窗口的Report Navigator面板,选中你刚运行的测试。然后在tab中选中 Coverage。

这会展示一个你的类、方法的列表,并标示出每个的测试覆盖率。如果你将鼠标悬停在checkWord这个方法上,你可以看到测试的覆盖率是28%。不能接受啊!我们需要找到,那些代码分支是能够被测试执行,那些是不能的,进而改善他们。双击方法的名字,Xcode会打开类的代码,并且看到code coverage的情况。

白色的区域表示这些代码时测试覆盖过的。灰色区域时测试无法覆盖的,我们需要添加更多的测试用例来覆盖灰色部分的代码。在右手边的数字,表明这些代码块,在这次测试中被执行的次数。

Improving Coverage

很显然,28%的覆盖率不是我们的目标。这里没有 UI,看起来是个完美的编写测试用例的候选function。所以,我们添加一个测试用例。理想情况下,我们希望每个分支都能被测试到。这样就能达到完整的覆盖。添加下面的测试用例到你的测试类中。

这些测试用例应该能够完全覆盖我们的代码了。运行一下单元,然后打开最后一个测试报告。

我们成功了,100%的覆盖率。你可以看到整个代码都变成了白色,右面的数字也展示了每个代码段至少被执行了一次。

使用code coverage是一个非常棒的方式,帮你建立真正有价值的测试组合。远好于你写了很多测试用例,但没有真正测试到代码。Xcode 7 让这种方式变的非常简单,我推荐你在项目中开启 Code Coverage。即使你已经写好了测试,也可以帮你知道到底测试写的怎么样。

延伸阅读

更多关于Xcode 7 中 Code Coverage 工具的内容,我推荐你观看 WWDC 2015 的session 410 Continuous Integration and Code Coverage in Xcode.最后,别忘了如果你想要试试我们上面的例子,可以在 Github 中找到他。

转载于:https://my.oschina.net/are1OfBlog/blog/523808

iOS 9 学习系列:Xcode Code Coverage Tools相关推荐

  1. iOS 9 学习系列: Xcode Code Coverage

    Code coverage 是一个计算你的单元測试覆盖率的工具. 高水平的覆盖给你的单元測试带来信心.也表明你的应用被彻底的測试过了. 你可能写了几千个单元測试,但假设覆盖率不高.那么你写的这套測试可 ...

  2. [源码、文档、分享] iOS/iPhone学习系列、代码教程(转)

    iOS/iPhone学习系列.代码教程----~~~持续更新中~~~ http://www.devdiv.com/iOS_iPhone-iOS_iPhone%E5%AD%A6%E4%B9%A0%E7% ...

  3. [源码、文档、分享] iOS/iPhone学习系列、代码教程----~~~持续更新中~~~

    转自:http://www.devdiv.com/iOS_iPhone-iOS_iPhone%E5%AD%A6%E4%B9%A0%E7%B3%BB%E5%88%97%E3%80%81%E4%BB%A3 ...

  4. iOS/iPhone学习系列、代码教程----~~~持续更新中~~~

    http://www.devdiv.com/forum.php?mod=viewthread&tid=48165   part 1--入门: 1. xcode 版本下载 以及 iphone s ...

  5. iOS/iPhone学习系列、代码教程

    part 1--入门: 1. xcode 版本下载 以及 iphone sdk 下载: 最新版本在此下载: http://developer.apple.com/devcenter/ios/index ...

  6. iOS开发学习系列(1)———Swift语言入门

    缘起 对于成为全栈开发者的目标而言,很好奇自己几年前怎么就没想过iOS开发的事情.iOS好歹也是移动操作系统两巨头之一.反思了下,有可能是因为之前对Object-C太无感导致的.现在趁着Swift,借 ...

  7. iOS 9 学习系列:Storyboard References

    http://www.cocoachina.com/ios/20150922/13474.html 如果你曾经使用 interface builder 创建过一个复杂.界面非常多的应用,你就会明白最后 ...

  8. iOS 9 学习系列:UIStack View

    http://www.cocoachina.com/ios/20150921/13492.html 在 iOS9 中,Apple 引入了 UIStackView,他让你的应用可以通过简单的方式,纵向或 ...

  9. java coverage_好用的Java Code Coverage工具?

    看了下这个问题是2014年问的,我最近对相关开源的Java Code Coverage Tools 做了一些相关测试,想把相关工具在2017年8月为止的一些相关的信息分享出来: 首先贴一个Covera ...

最新文章

  1. 【SQL】数据库的SQL查询,涉及多个数据库
  2. 深度学习:tensorflow Layers的实现,numpy实现深度学习(二)
  3. PWN-PRACTICE-BUUCTF-11
  4. Python time 模块 - Python零基础入门教程
  5. 蓝桥杯单片机:模块代码
  6. Python 机器学习在线指南
  7. 只安装oracle服务端连plsql,Oracle 不安装Oracle客户端,使用PLSQL连接Oracle服务器
  8. java.util.stream.IntStream
  9. 岗位目标_达州苏宁召开2019年度工作规划 与岗位目标责任书签订仪式会议
  10. python 生成wifi密码字典_python生成密码字典的方法
  11. lcd显示c语言程序,1602液晶简单显示程序
  12. java同步和异步概念
  13. 液压系统仿真软件_利用仿真软件判断系统稳定
  14. 可以用计算机控制手机的软件,还有这样的神奇软件!让你用PC操控手机的神器...
  15. 中标麒麟V7系统开启日志服务器收集日志
  16. 石灰窑计算机控制上料,石灰窑自动化控制系统
  17. 测试工程师入门知识点整理
  18. 苹果gamecenter未能连接服务器,win7系统GameCenter无法连接服务器的解决方法
  19. Markdown中图片左对齐
  20. 学习笔记 —— 基于C加速的Python高效计算 (Cython pybind11)

热门文章

  1. Python基础之函数2 (参数的返回值)
  2. 机器学习实战第一步:特征选择与特征工程「附代码」
  3. 机器学习算法面试—口述(4):决策树
  4. 多目标跟踪 | AI产品经理需要了解的CV通识(三)
  5. SAP MM 条件类型中PB00的‘Group Cond.‘标记的作用?
  6. 干货丨【看图识算法】这是你见过最简单的 “算法说明书”
  7. python如何去掉一个字符串两边的引号
  8. 张亚勤院士谈“智能计算新趋势”
  9. 元宇宙深度研究报告:元宇宙是互联网的终极形态?
  10. 欧阳自远:有个性的嫦娥12345,如何不重复美国探月路?