Xcode中统计代码覆盖率

最近在项目里需要在单元测试时统计一下代码覆盖率,其实就是被用来作为测量单元测试的指标,看看测试的代码覆盖到多广的范围,下面介绍一下如何统计单元测试的代码覆盖率:

下载工具

主要采用XcodeCoverage工具,它可以将代码覆盖的结果以html的形式展现,方便我们查看,可以采用pod的方式安装:

pod 'XcodeCoverage', '~>1.0'

工程配置

pod安装后需要配置工程:

  • 设置 Build Settings
    需要设置两个地方,找到 “Generate Test Coverage Files”和“Instrument Program Flow”两个选项,分别设置Debug下为YES:
屏幕快照 2015-06-11 下午5.47.01.png
  • 设置 Build Phases
    点击New Run Script Phase,编辑使其运行Pods/XcodeCoverage/exportenv.sh脚本:
添加运行脚本

RUN

工程配置完后,开始跑单元测试例。跑完测试例后,打开终端,cd进入到XcodeCoverage目录,运行如下脚本:

./getcov --show

然后你就可以在浏览器中查看你的代码覆盖率结果。

example

下面假设你要测试一个getMaxNumber功能,代码如下:

@implementation MaxNumber

+(int)getMaxNumber:(int)a b:(int)b c:(int)c
{
    if(a > b){
        if(a > c){
            return a;
        }else{
            return c;
        }
    }else{
        if(b > c){
            return b;
        }else{
            return c;
        }
    }
}

@end

首先添加一个单元测试:

-(void)testGetMax
{
    XCTAssertEqual(3, [MaxNumber getMaxNumber:1 b:2 c:3]);
}

运行完该测试例后,运行脚本./getcov --show,便可以看到如下结果:


不完全覆盖

其中的红色表示测试例没有覆盖到的地方。下面增加三个测试例

-(void)testGetMax
{
    XCTAssertEqual(3, [MaxNumber getMaxNumber:1 b:2 c:3]);
    XCTAssertEqual(3, [MaxNumber getMaxNumber:2 b:1 c:3]);
    XCTAssertEqual(3, [MaxNumber getMaxNumber:3 b:2 c:1]);
    XCTAssertEqual(3, [MaxNumber getMaxNumber:1 b:3 c:2]);
}
   

测试例修改之后,需要先运行cleancov脚本(如果工程里面的代码修改了,需要clean product),然后再运行脚本./getcov --show查看结果:


完全覆盖

可以看出现在的测试代码已经覆盖到了该函数的所有代码。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,491评论 19 139
  • 1.测试与软件模型 软件开发生命周期模型指的是软件开发全过程、活动和任务的结构性框架。软件项目的开发包括:需求、设...
    Mr希灵阅读 22,181评论 7 278
  • 1.测试与软件模型 软件开发生命周期模型指的是软件开发全过程、活动和任务的结构性框架。软件项目的开发包括:需求、设...
    宇文臭臭阅读 11,685评论 5 100
  • 文章来自:http://blog.csdn.net/mj813/article/details/52451355 ...
    好大一只鹏阅读 13,007评论 2 126
  • 前几天,玲姐在某三级医院遇到了一个奇葩护士,发生了一些不愉快,作为护士长的她,回到自己医院,心情久久不能平静,说如...
    雨果的天空阅读 1,820评论 2 2