最近在项目里需要在单元测试时统计一下代码覆盖率,其实就是被用来作为测量单元测试的指标,看看测试的代码覆盖到多广的范围,下面介绍一下如何统计单元测试的代码覆盖率:
下载工具
主要采用XcodeCoverage工具,它可以将代码覆盖的结果以html的形式展现,方便我们查看,可以采用pod的方式安装:
pod 'XcodeCoverage', '~>1.0'
工程配置
pod安装后需要配置工程:
- 设置 Build Settings
需要设置两个地方,找到 “Generate Test Coverage Files”和“Instrument Program Flow”两个选项,分别设置Debug下为YES:
- 设置 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查看结果:
可以看出现在的测试代码已经覆盖到了该函数的所有代码。