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%覆盖的测试覆盖率。

check word

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

tests

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

turn on coverage

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

The Coverage Tab

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

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

test coverage panel

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

coverage result

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

Improving Coverage

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

test cases

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

the final coverage result

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

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

Demo在Github地址: https://github.com/fish-yan/XCode-Code-Coverage

时间: 2024-10-23 23:51:18

iOS 9 学习系列: Xcode Code Coverage的相关文章

iOS 9 学习系列:Xcode Code Coverage Tools

Code coverage 是一个计算你的单元测试覆盖率的工具.高水平的覆盖给你的单元测试带来信心,也表明你的应用被彻底的测试过了.你可能写了几千个单元测试,但如果覆盖率不高,那么你写的这套测试可能价值也不大. 这里并没有一个确切的百分比,要求你必须到达这个覆盖率.这很大程度上取决于你的项目(的具体情况).譬如说,如果你的项目中有很多不能写单元测试的视觉组件,那么覆盖率就会比单纯处理数据的框架要低的多. Code Coverage in Xcode 在过去,如果你想要制作一个测试的代码覆盖报告出

iOS 12学习系列:针对Xcode的警告忽略消除处理

问题描述 html代码如下 1 <html> 2 <head> 3 <meta charset="utf-8"/> 4 <title>我的网页</title> 5 <script type="text/javascript"> 6 function JS2OC() 7 { 8 window.location.href="fzw://send"; 9 } 10 </scr

iOS 9学习系列:打通 iOS 9 的通用链接(Universal Links)

在WWDC 2015 上, Apple 为 iOS 9 宣布了一个所谓 通用链接 的深层链接特性, 视频地址为 [无缝链接到您的 App].虽然它不是一个必须实现的功能, 但还是需要引起一些注意. 在网上有太多让人迷惑和错误的信息, 这次 WWDC 本身也没有去描述细节.幸运的是, 在 HOKO 我们在我们的智能链接上添加了这一特性, 所以我们可以无缝的引导用户到 APP 上. 什么是通用链接? 很显然 Apple 正在大力推动 APP 开发者在深层链接上有更好的体验.所有的消息都围绕着深层链接

iOS 13学习系列:如何在github下载开源项目到本地

一.问题描述 以 Coding iOS 客户端 为例讲解如何在github下载开源项目到本地 github地址:https://github.com/Coding/Coding-iOS 二.问题分析 根据项目的Git仓库是否引用其他版本库中的文件Git仓库,就是是否用到git submodule子模组,分为两种方式下载开源项目到本地. git submodule:项目的版本库在某些情况下需要引用其他版本库中的文件,例如有一套公用的代码库,可以被多个项目调用,这个公用代码库能直接放在某个项目的代码

iOS Mobile Development: Using Xcode Targets to Reuse the Code 使用xcode targets来实现代码复用

In the context of iOS mobile app development, a clone is simply an app that is based off another mobile app. A clone usually has more or less the same code base with probably a slightly different functionality. It’s quite common for this app to have

Entity Framework Code First学习系列

Entity Framework Code First学习系列目录 Entity Framework Code First学习系列说明:开发环境为Visual Studio 2010 + Entity Framework 5.0+MS SQL Server 2012,在数据库方面Entity Framework Code First在Entity Framework 5.0仅支持MS SQL Server数据库.在接下来的随笔中,均使用项目名称为Portal的控制台应用程序为例.具体的系统学习目

ios/mac/COCOA系列 -- UIALertVIew 学习笔记

最近在学习ios开发,学习的书籍<ios7 Pragramming cookbook>,做笔记的目的以后方便查看.笔记形式是小例子,将书上的例子书写完整. UIAlertViewClass 的使用场景 1,向用户以一个警告的形式显示信息. 2,让用户确认一些动作 3,让用户输入用户名和密码 4,让用户输入一些文本,这些文本在程序被使用 例1   实现简单显示一些警告信息 新建一个 Single View Application 简单工程,工程名字维AlterView,扩展前缀CB   代码如下

OpenCV学习系列(零) Mac下OpenCV + xcode环境搭建

# OpenCV学习系列(零) Mac下OpenCV + xcode环境搭建 [-= 博客目录 =-] 1-学习目标 1.1-本章介绍 1.2-实践内容 1.3-相关说明 2-学习过程 2.1-homebrew安装 2.2-使用homebrew安装CMake 2.3-源码安装OpenCV 2.4-xcode配置与测试 2.5-基础问题回答 3-资料 1-学习目标 1.1-本章介绍 因为不可抗力(╯﹏╰),最近去图书馆借了一本<OpenCV编程案例详解>,准备学习OpenCV的使用,因为身患懒癌

IOS开发学习记录第2天之熟悉Xcode常用快捷键

(一).Xcode里你应该了解的快捷键 1.第一天我们熟悉了Mac 常用的快捷键,那么今天我们就来了解学习一下Xcode里我们应该知道的快捷键,当然这里首先要感谢一下 Jimmy.Yang,因为自己在学习的时候看到他得博客,感觉挺全面的,所以摘抄过来一些我们以后应该会常用到得快捷键.摘抄自:http://www.cnblogs.com/yjmyzz/archive/2011/01/25/1944325.html command + N: 新文件 command + shift + N: 新项目