iOS 9 学习系列: Xcode Code Coverage
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"是被选中的。然后点击关闭button,执行測试的 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 让这样的方式变的很easy,我推荐你在项目中开启 Code Coverage。即使你已经写好了測试。也能够帮你知道究竟測试写的怎么样。
Demo在Github地址: https://github.com/fish-yan/XCode-Code-Coverage
转载于:https://www.cnblogs.com/lytwajue/p/7388364.html
iOS 9 学习系列: Xcode Code Coverage相关推荐
- [源码、文档、分享] iOS/iPhone学习系列、代码教程(转)
iOS/iPhone学习系列.代码教程----~~~持续更新中~~~ http://www.devdiv.com/iOS_iPhone-iOS_iPhone%E5%AD%A6%E4%B9%A0%E7% ...
- iOS 9 学习系列:Xcode Code Coverage Tools
2019独角兽企业重金招聘Python工程师标准>>> Code coverage 是一个计算你的单元测试覆盖率的工具.高水平的覆盖给你的单元测试带来信心,也表明你的应用被彻底的测试 ...
- [源码、文档、分享] 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 ...
- iOS/iPhone学习系列、代码教程----~~~持续更新中~~~
http://www.devdiv.com/forum.php?mod=viewthread&tid=48165 part 1--入门: 1. xcode 版本下载 以及 iphone s ...
- iOS/iPhone学习系列、代码教程
part 1--入门: 1. xcode 版本下载 以及 iphone sdk 下载: 最新版本在此下载: http://developer.apple.com/devcenter/ios/index ...
- iOS开发学习系列(1)———Swift语言入门
缘起 对于成为全栈开发者的目标而言,很好奇自己几年前怎么就没想过iOS开发的事情.iOS好歹也是移动操作系统两巨头之一.反思了下,有可能是因为之前对Object-C太无感导致的.现在趁着Swift,借 ...
- iOS 9 学习系列:Storyboard References
http://www.cocoachina.com/ios/20150922/13474.html 如果你曾经使用 interface builder 创建过一个复杂.界面非常多的应用,你就会明白最后 ...
- iOS 9 学习系列:UIStack View
http://www.cocoachina.com/ios/20150921/13492.html 在 iOS9 中,Apple 引入了 UIStackView,他让你的应用可以通过简单的方式,纵向或 ...
- iOS学习系列 - 扩展机制category与associative
iOS学习系列 - 扩展机制category与associative category与associative作为objective-c的扩展机制的两个特性,category即类型,可以通过它来扩展方 ...
最新文章
- 火锅店市场容量或变化趋势_2020-2026年中国氮肥市场深度研究与投资前景预测报告...
- 没了解过条件注解@ConditionalOn..?Spring Boot白学了!
- 计算机视觉:让冰冷的机器看懂这个多彩的世界
- 开始python之旅
- c语言putchar_C语言实现变色的心!连机器都会变心,呵,男人!
- .net mysql 工作流_一个适合于.NET Core的超轻量级工作流引擎:Workflow-Core
- Node开发知识概括
- 修改 Chrome浏览器主页被劫持 chrome 主页被篡改成hao.qquu8.com的解决方案
- MongoDB整理笔记のGUI操作
- 笨办法学Python习题11 提问
- 利用PPT表格对图片进行矩形分割
- 查看DDR的频率【学习笔记】
- word 电子签名去背景方法
- Java项目:图书馆管理系统思路分析
- 计算机课教学常规要求,2020学校教学常规管理制度
- 1.6 判断一个字符串是否由重复子字符串组成
- 荣耀4a android art,荣耀4A黑科技大揭秘,真是给工程师给跪了!!
- 《Nature》子刊发布,IIT科学家模仿“植物的触须”,打造可逆渗透致动的仿生软体机器人
- 简单易懂逆矩阵,终于明白矩阵的逆到底有什么用
- Coursera上有哪些相见恨晚的数据课程
热门文章
- 130.CDMA全称是什么?
- 28.进程和程序的区别
- 基于 DDD 设计并实现模块化单体应用
- ML神器:sklearn的快速使用
- qt的输出中文,数字到表格
- java 有序列表_关于算法:在Java中为列表列表生成唯一的有序非重复组合
- ios 权限提示语_撩妹神技?iOS 微信偷偷上线“拍一拍”
- 016_SpringBoot整合MyBatis
- 注册不上zookeeper无报错_Zookeeper 跨区高可用方案
- php函数有哪三种,【后端开发】php函数可以分为哪三种