Xcode5 统计单元测试覆盖率(仅限XCTest)
通过本篇文章,你将学会如何在Xcode5下使用统计XCTest测试代码的覆盖率,以及如何快速得到测试覆盖率的图形化报表。
为什么要特别说明Xcode5下的代码覆盖率统计,原因是,以前的方法在新环境下,结果不那么令人满意了:
Code coverage doesn't work well with iOS 7 because iOS 7 does not call any code at the "end" of an app. iOS7 does not:
- allow you to register functions with atexit
- run any functions marked with the attribute((destructor))
- run any C++ destructors for global objects
(以上英文摘自CoverStory的wiki:https://code.google.com/p/coverstory/wiki/UsingCoverstory)
如何解决
Xcode5 里面单元测试覆盖率统计用的还是gcov,显示统计结果用的是lcov,单元测试框架用的XCTest(Xcode5新加的)。
步骤1:在工程的(应用目标和测试目标都设置)Build Settings中设置:
仅设置Debug模式即可。
步骤2:
把需要被测试的类同时添加到测试Target:
关于这一步在网上找了一圈,存在一些争议,有一说是应用代码不要添加到到测试目标,但是我试验的时候,不添加到测试目标,运行单元测试的时候,没有.gcda文件生成,.gcon文件覆盖率全是0。最后还是添加到了测试目标,才统计出单元测试代码的覆盖率。
步骤3:
下载gcov IOS7下辅助刷新的类库:XCode5gcovPatch
这个类库帮助弥补IOS7 下gcov刷新的问题(问题原因,见文章开始处的英文)。
地址:https://github.com/leroymattingly/XCode5gcovPatch
下载下来之后解压缩,将这两个类别添加到工程:
UIApplication+GCovFlush.h仅添加到应用目标
XCTest+GCovFlush 仅添加到测试目标
步骤4:
下载覆盖率工具:XcodeCoverage
这个工具帮助快速产生图形化报表。
下载完成解压缩之后放到项目.xcodeproj文件所在的文件夹内(和.xcodeproj文件平级)
然后下载lcov(下载地址:http://ltp.sourceforge.net/coverage/lcov.php)解压缩之后放到XcodeCoverage内。
在测试Target下添加Build Phases:RunScript (XcodeCoverage说明是要添加到应用目标,但是我试过,不工作,无法统计到代码覆盖率,改到测试Target工作正常)
Script代码:
- <span style="white-space:pre"> </span>XcodeCoverage/exportenv.sh
步骤5:clean工程并运行你的单元测试
步骤6.命令行下CD 到XcodeCoverage目录下 运行./getcov
经测试,目前仅在模拟器下能看到,真机下不会生产.gcda文件,无法产生覆盖率报表,在进一步调研中。
就会看到代码覆盖率统计页面:
代码有修改要重新运行单元测试,先CD 到XcodeCoverage目录 运行./cleancov 运行完单元测试./getcov即可获得覆盖率报表。
Xcode5 统计单元测试覆盖率(仅限XCTest)的更多相关文章
- Jenkins集成jacoco收集单元测试覆盖率
Jenkins集成jacoco收集单元测试覆盖率 2020-02-28 目录 0 整体思路1 Jenkins创建JacocoIntegrateTestDemo项目2 配置源码管理3 配置Build4 ...
- 使用coverage工具统计python单元测试覆盖率
Coverage简介 Coverage是一种用于统计Python代码覆盖率的工具,通过它可以检测测试代码对被测代码的覆盖率如何.Coverage支持分支覆盖率统计,可以生成HTML/XML报告. 官方 ...
- [转载] JaCoCo:分析单元测试覆盖率的利器
转载自http://www.ibm.com/developerworks/cn/java/j-lo-jacoco/和http://www.cnblogs.com/chenfengmugu/p/4937 ...
- Android-jacoco代码覆盖率:单元测试覆盖率+功能测试覆盖率
参考:https://docs.gradle.org/current/dsl/org.gradle.testing.jacoco.tasks.JacocoCoverageVerification.ht ...
- python工业互联网应用实战14——单元测试覆盖率
前面的章节我们完成了任务管理主要功能的开发及单元测试编写,可如何知道单元测试效果怎么样呢?测试充分吗?还有没有没有测到的地方呢? 本章节我们介绍一个统计测试代码覆盖率的利器Coverage,Cover ...
- 使用coverlet统计单元测试的代码覆盖率
单元测试是个好东西, 可以在一定程度上兜底 虽然写单元测试这件事情非常麻烦 但是好的单元测试可以显著提高代码质量, 减少bug, 避免无意中的修改导致其他模块出错 写测试用例的过程中, 靠人力去确保所 ...
- HTC仅限拨打紧急电话
问题描述: 我手上有台 HTC One V 没碰没撞,突然打不出电话,信号上显示一个叉,屏幕上显示“仅限拨打紧急电话” 解决办法:经百度,原来很多HTC机子都有这种情况,幸好不是硬件坏了,只需按以下步 ...
- 真正的手机破解wifi密码,aircrack-ng,reaver,仅限mx2(BCM4330芯片)
仅限mx2(BCM4330芯片),mx可能有戏没测试(BCM4329?),mx3不行. PS:原生安卓应用,非虚拟机 reaver,不知道是啥的看这里http://tieba.baidu.com/p/ ...
- nodejs 中使用 mocha + should + jscoverage 生成 单元测试覆盖率报告
最近一直在做nodejs,而关于js的单元测试覆盖率网上资料比较少而且吧比较零散,我从网上找来一些资料整理一下分析给大家,希望大家可以少走弯路. 首先我是从windows环境下测试的,用到的工具有 m ...
随机推荐
- [杂题]:staGame(博弈论+Trie树+DFS)
题目描述 $pure$和$dirty$决定玩$T$局游戏.对于每一局游戏,有$n$个字符串,并且每一局游戏由$K$轮组成.具体规则如下:在每一轮游戏中,最开始有一个空串,两者轮流向串的末尾添加一个字符 ...
- js中打地鼠游戏
<!DOCTYPE html><html lang=""><head> <mata charset = "utf-8" ...
- JS:收集的一些Array及String原型对象的扩展实现代码
扩展Array的原型对象的方法 // 删除数组中数据 Array.prototype.del = function(n) { if (n<0) return this; return this ...
- 安装php时,configure: error: xml2-config not found. Please check your libxml2 installation
参考文章:http://blog.csdn.net/anljf/article/details/6981247 安装php时的报错configure: error: xml2-config not f ...
- Php邮件发送源码
好久冒写点东西了.....最近生活压抑的很....为生活而劳累,整理下邮件发送的实例了,网上也有很多,我这个也是提取整理好的,测试Ok,首页邮件类smtp_email_class.php如下:< ...
- SQLServer2008不允许保存更改
sql server 2008在更改表结构的时候提示 “不允许保存更改,您所做的更改要求删除并重新创建以下表” 解决方案: 1.一般情况下:工具--选项--Designers--表设计器和数据库设计器 ...
- Java并发AtomicLongArray类
java.util.concurrent.atomic.AtomicLongArray类提供了可以原子读取和写入的底层long类型数组的操作,并且还包含高级原子操作. AtomicLongArray支 ...
- flink-training-course
目录 flink-training-course 大数据领域顶级盛会 Flink Forward Asia 2019 详情
- 对python中的__name__的理解
一开始学习python的时候,不理解python中的__name__的用途,一致感觉__name__的返回结果就是__main__ 今天系统的看了一下,才理解过来,__name__真正的用处是用在使用 ...
- [Python]判断序列是否为空的正确姿势
本篇文章起源于StackOverflow上一个热度非常高的问题: 我该如何判断一个Python列表是否为空? @Ray Vega (提问者) 举例说明,现在我得到了如下代码: a = [] 我如何该检 ...
