最近在項(xiàng)目里需要在單元測(cè)試時(shí)統(tǒng)計(jì)一下代碼覆蓋率,其實(shí)就是被用來(lái)作為測(cè)量單元測(cè)試的指標(biāo),看看測(cè)試的代碼覆蓋到多廣的范圍,下面介紹一下如何統(tǒng)計(jì)單元測(cè)試的代碼覆蓋率:
下載工具
主要采用XcodeCoverage工具,它可以將代碼覆蓋的結(jié)果以html的形式展現(xiàn),方便我們查看,可以采用pod的方式安裝:
pod 'XcodeCoverage', '~>1.0'
工程配置
pod安裝后需要配置工程:
- 設(shè)置 Build Settings
需要設(shè)置兩個(gè)地方,找到 “Generate Test Coverage Files”和“Instrument Program Flow”兩個(gè)選項(xiàng),分別設(shè)置Debug下為YES:
屏幕快照 2015-06-11 下午5.47.01.png
- 設(shè)置 Build Phases
點(diǎn)擊New Run Script Phase,編輯使其運(yùn)行Pods/XcodeCoverage/exportenv.sh腳本:
添加運(yùn)行腳本
RUN
工程配置完后,開(kāi)始跑單元測(cè)試?yán)E芡隃y(cè)試?yán)螅蜷_(kāi)終端,cd進(jìn)入到XcodeCoverage目錄,運(yùn)行如下腳本:
./getcov --show
然后你就可以在瀏覽器中查看你的代碼覆蓋率結(jié)果。
example
下面假設(shè)你要測(cè)試一個(gè)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
首先添加一個(gè)單元測(cè)試:
-(void)testGetMax
{
XCTAssertEqual(3, [MaxNumber getMaxNumber:1 b:2 c:3]);
}
運(yùn)行完該測(cè)試?yán)螅\(yùn)行腳本./getcov --show,便可以看到如下結(jié)果:
不完全覆蓋
其中的紅色表示測(cè)試?yán)龥](méi)有覆蓋到的地方。下面增加三個(gè)測(cè)試?yán)?/p>
-(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]);
}
測(cè)試?yán)薷闹螅枰冗\(yùn)行cleancov腳本(如果工程里面的代碼修改了,需要clean product),然后再運(yùn)行腳本./getcov --show查看結(jié)果:
完全覆蓋
可以看出現(xiàn)在的測(cè)試代碼已經(jīng)覆蓋到了該函數(shù)的所有代碼。