最近在項目里需要在單元測試時統(tǒng)計一下代碼覆蓋率铸抑,其實就是被用來作為測量單元測試的指標(biāo)粹淋,看看測試的代碼覆蓋到多廣的范圍,下面介紹一下如何統(tǒng)計單元測試的代碼覆蓋率:
下載工具
主要采用XcodeCoverage工具,它可以將代碼覆蓋的結(jié)果以html的形式展現(xiàn)避凝,方便我們查看,可以采用pod的方式安裝:
pod 'XcodeCoverage', '~>1.0'
工程配置
pod安裝后需要配置工程:
- 設(shè)置 Build Settings
需要設(shè)置兩個地方眨补,找到 “Generate Test Coverage Files”和“Instrument Program Flow”兩個選項管削,分別設(shè)置Debug下為YES:
- 設(shè)置 Build Phases
點擊New Run Script Phase,編輯使其運行Pods/XcodeCoverage/exportenv.sh腳本:
RUN
工程配置完后渤涌,開始跑單元測試?yán)逡ァE芡隃y試?yán)螅蜷_終端实蓬,cd進(jìn)入到XcodeCoverage目錄茸俭,運行如下腳本:
./getcov --show
然后你就可以在瀏覽器中查看你的代碼覆蓋率結(jié)果。
example
下面假設(shè)你要測試一個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]);
}
運行完該測試?yán)蟮鼢蓿\行腳本./getcov --show,便可以看到如下結(jié)果:
其中的紅色表示測試?yán)龥]有覆蓋到的地方酌伊。下面增加三個測試?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]);
}
測試?yán)薷闹筇谖眩枰冗\行cleancov腳本(如果工程里面的代碼修改了,需要clean product)居砖,然后再運行腳本./getcov --show查看結(jié)果:
可以看出現(xiàn)在的測試代碼已經(jīng)覆蓋到了該函數(shù)的所有代碼虹脯。