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,加入一个以下的简单的測试方法。他看起来是这样子的。
imageMogr2/auto-orient/strip%7CimageView2/2/w/1240/q/100" class="imagebubble-image" alt="">
在执行測试之前,我们必须先确认 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。所以,我们加入一个測试用例。
理想情况下,我们希望每一个分支都能被測试到。
这样就能达到完整的覆盖。加入以下的測试用例到你的測试类中。
这些測试用例应该可以全然覆盖我们的代码了。执行一下单元。然后打开最后一个測试报告。
imageMogr2/auto-orient/strip%7CimageView2/2/w/1240/q/100" class="imagebubble-image" alt="">
我们成功了,100%的覆盖率。
你能够看到整个代码都变成了白色,右面的数字也展示了每一个代码段至少被运行了一次。
使用code coverage是一个很棒的方式,帮你建立真正有价值的測试组合。远好于你写了许多測试用例,但没有真正測试到代码。
Xcode 7 让这样的方式变的很easy,我推荐你在项目中开启 Code Coverage。即使你已经写好了測试。也能够帮你知道究竟測试写的怎么样。
Demo在Github地址: https://github.com/fish-yan/XCode-Code-Coverage
iOS 9 学习系列: Xcode Code Coverage的更多相关文章
- iOS 9 学习系列:Split Screen Multitasking
http://www.cocoachina.com/ios/20151010/13601.html iOS 9 的一个重大变化就是增加了多任务,这个多任务允许用户在屏幕上同时运行多个 app.有两种形 ...
- iOS/iPhone学习系列、代码教程
part 1--入门: 1. xcode 版本下载 以及 iphone sdk 下载: 最新版本在此下载: http://developer.apple.com/devcenter/ios/index ...
- iOS日常学习 - 每个Xcode开发者应该知道的七个使用技巧
本文为转载学习使用原文链接 工欲善其事,必先利其器.对一个iOS开发者来说,这就意味着对Xcode的熟练掌握程度.Xcode是一个学习起来有点难度的软件,下面的这些技巧或许可以显著的提高你的编程效率. ...
- iOS 9学习系列:打通 iOS 9 的通用链接(Universal Links)
在WWDC 2015 上, Apple 为 iOS 9 宣布了一个所谓 通用链接 的深层链接特性, 视频地址为 [无缝链接到您的 App].虽然它不是一个必须实现的功能, 但还是需要引起一些注意. 在 ...
- 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 9 学习系列:UIStack View (转载)
作者:Nathan_Bao 地址:http://www.jianshu.com/p/1991e6c2881a 在 iOS9 中,Apple 引入了 UIStackView,他让你的应用可以通过简单的方 ...
- OpenCV学习系列(一) Mac下OpenCV + xcode人脸检测实现
# OpenCV学习系列(一) Mac下OpenCV + xcode人脸检测实现 [-= 博客目录 =-] 1-学习目标 1.1-本章介绍 1.2-实践内容 1.3-相关说明 2-学习过程 2.1-环 ...
- OpenCV学习系列(零) Mac下OpenCV + xcode环境搭建
# OpenCV学习系列(零) Mac下OpenCV + xcode环境搭建 [-= 博客目录 =-] 1-学习目标 1.1-本章介绍 1.2-实践内容 1.3-相关说明 2-学习过程 2.1-hom ...
随机推荐
- javascript获取和设置URL中的参数
勘误版 function getQuery(key, url) { url = url || window.location.href; if (url.indexOf('#') !== -1) ur ...
- Binary Search二分法搜索C++程序
二分法基本上学计算机的都听过,但是有人不知道的就是其实二分法是减治法的思想. 所谓减治法和分治法有一个主要差别就是减治法是减去一般,就是分治之后只需要解决原问题的一半就可以了得到全局问题的解了.所以速 ...
- angularjs的config和interceptor - session注入
config 这个要从config的正确使用说起,也许你想在config某个provider的时候注入$rootscope, 但是这是不允许的,我们细看下面的特性 session注入 每个请求自带se ...
- MongoDB副本集配置系列五:副本集的在线迁移
MongoDB副本集的在线迁移 查看当前集群的状态: { "setName" : "gechongrepl", "setVersion" : ...
- python程序打包
环境: CentOS6.5_x64Python版本 : 2.6 使用pyinstaller打包 pyinstaller可以将python程序打包成二进制文件,打包后的文件在没有python的环境中也可 ...
- java 生成GUID与UUID
java 生成GUID与UUID CreateTime--2018年5月31日16点29分 Author:Marydon import java.util.UUID; public static ...
- Mongodb下载地址
通过官网https://www.mongodb.com/访问下载页面点击下载一直不能成功,通过如下的链接可以直接下载所有版本的安装文件. windows版本下载地址:http://dl.mongodb ...
- 最大整数(Noip1998连接多位数)
最大整数(Noip1998连接多位数)[问题描述] 设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数. 例如:n=3时,3个整数13,312,343联接成的最大整数为:343312 ...
- Linux下ls与cp命令
Linux熟练的应用命令,才可以随心所欲~ ls 注意: ls -1 //每次只列出1个文件 cp 注意: cp -u xxx xxx //注意修改时间的先后
- Android 自定义控件-高仿猎豹清理大师自定义内存开口圆环控件
技术:Android+java 概述 看见猎豹清理大师的内存开口圆环比例进度 挺有意思的,于是就是想自己实现下这样的效果,于是反编译了猎豹清理 大师的app看了下,原来是有两张图,于是脑子里就过了 ...