iOS9 Day-by-Day :: Day 5 :: Xcode Code Coverage Tools

原文地址

這是一個系列文章辞色,查看更多請移步目錄頁

Code coverage 是一個計算你的單元測試覆蓋率的工具。高水平的覆蓋給你的單元測試帶來信心米罚,也表明你的應(yīng)用被徹底的測試過了钧汹。你可能寫了幾千個單元測試,但如果覆蓋率不高录择,那么你寫的這套測試可能價值也不大拔莱。

這里并沒有一個確切的百分比,要求你必須到達這個覆蓋率隘竭。這很大程度上取決于你的項目(的具體情況)塘秦。譬如說,如果你的項目中有很多不能寫單元測試的視覺組件动看,那么覆蓋率就會比單純處理數(shù)據(jù)的框架要低的多尊剔。

Code Coverage in Xcode

在過去,如果你想要制作一個測試的代碼覆蓋報告出來弧圆,需要設(shè)置很多[選項]赋兵。非常復雜笔咽,還有許多需要手動設(shè)置搔预。在 iOS 9中,蘋果提供了智能的代碼覆蓋工具叶组,他是和 LLVM 一體的拯田,每次運行測試都會被調(diào)用和計算。

Using the Code Coverage Tools

現(xiàn)在我們用一個例子來展示甩十,如何使用新的 code coverage 工具和怎樣提升現(xiàn)在的測試用例船庇。完成后的代碼放在了 Github 上,你可以跟著做侣监。

第一件事是創(chuàng)建一個新項目鸭轮,并確認你選上了Unit tests選項。這會按要求創(chuàng)建一個默認項目橄霉,現(xiàn)我們需要測試點什么窃爷。這個測試可能是你的任意需求,這里我添加一個空的 swift 文件,里面寫好了一個全局的方法按厘。這個方法檢測兩個字母串是否是僅排序不同的相同字母組成的詞医吊。寫成全局的方法,可能不是好的設(shè)計逮京,但這里我們僅演示一下卿堂。

這是一個相對簡單的方法,所以我們可能會得到一個沒有任何問題的懒棉,100%覆蓋的測試覆蓋率草描。

check word

一旦你寫好了算法,就該寫個測試了漓藕。打開項目創(chuàng)建時已經(jīng)創(chuàng)建好了的默認的XCTestCase,添加一個下面的簡單的測試方法陶珠。他看起來是這樣子的。


tests

在運行測試之前享钞,我們必須先確認 code coverage 是否被打開了揍诽,寫代碼時,默認是關(guān)閉的栗竖。所以你需要編輯一下你的測試 scheme暑脆,把它打開。

turn on coverage

確保"Gather coverage data"是被選中的狐肢,然后點擊關(guān)閉按鈕添吗,運行測試的 target. 我們希望剛剛創(chuàng)建的測試用例能夠順利通過。

The Coverage Tab

一旦這個測試通過了份名,你就能知道 checkWord 這個方法碟联,至少有一條路徑是對的。但你不知道的是僵腺,還多多少沒有被測試到鲤孵。這就是code coverage這個工具的好處。當你打開code coverage tab后辰如,你可以清楚的看到測試的覆蓋情況普监。他們按找 target, file, function 進行了自動分組。

打開Xcode左邊窗口的Report Navigator面板琉兜,選中你剛運行的測試凯正。然后在tab中選中 Coverage。

test coverage panel

這會展示一個你的類豌蟋、方法的列表廊散,并標示出每個的測試覆蓋率。如果你將鼠標懸停在checkWord這個方法上梧疲,你可以看到測試的覆蓋率是28%允睹。不能接受笆┓!我們需要找到擂找,那些代碼分支是能夠被測試執(zhí)行戳吝,那些是不能的,進而改善他們贯涎。雙擊方法的名字听哭,Xcode會打開類的代碼,并且看到code coverage的情況塘雳。

coverage result

白色的區(qū)域表示這些代碼時測試覆蓋過的陆盘。灰色區(qū)域時測試無法覆蓋的败明,我們需要添加更多的測試用例來覆蓋灰色部分的代碼隘马。在右手邊的數(shù)字,表明這些代碼塊妻顶,在這次測試中被執(zhí)行的次數(shù)酸员。

Improving Coverage

很顯然,28%的覆蓋率不是我們的目標讳嘱。這里沒有 UI幔嗦,看起來是個完美的編寫測試用例的候選function。所以沥潭,我們添加一個測試用例邀泉。理想情況下,我們希望每個分支都能被測試到钝鸽。這樣就能達到完整的覆蓋汇恤。添加下面的測試用例到你的測試類中。

test cases

這些測試用例應(yīng)該能夠完全覆蓋我們的代碼了拔恰。運行一下單元因谎,然后打開最后一個測試報告。

the final coverage result

我們成功了仁连,100%的覆蓋率蓝角。你可以看到整個代碼都變成了白色阱穗,右面的數(shù)字也展示了每個代碼段至少被執(zhí)行了一次饭冬。

使用code coverage是一個非常棒的方式,幫你建立真正有價值的測試組合揪阶。遠好于你寫了很多測試用例昌抠,但沒有真正測試到代碼。Xcode 7 讓這種方式變的非常簡單鲁僚,我推薦你在項目中開啟 Code Coverage炊苫。即使你已經(jīng)寫好了測試裁厅,也可以幫你知道到底測試寫的怎么樣。

延伸閱讀

更多關(guān)于Xcode 7 中 Code Coverage 工具的內(nèi)容侨艾,我推薦你觀看 WWDC 2015 的session 410 Continuous Integration and Code Coverage in Xcode.最后执虹,別忘了如果你想要試試我們上面的例子,可以在 Github 中找到他唠梨。

這是一個系列文章袋励,查看更多請移步目錄頁

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市当叭,隨后出現(xiàn)的幾起案子茬故,更是在濱河造成了極大的恐慌,老刑警劉巖蚁鳖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件磺芭,死亡現(xiàn)場離奇詭異,居然都是意外死亡醉箕,警方通過查閱死者的電腦和手機钾腺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讥裤,“玉大人垮庐,你說我怎么就攤上這事∥肭伲” “怎么了哨查?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長剧辐。 經(jīng)常有香客問我寒亥,道長,這世上最難降的妖魔是什么荧关? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任溉奕,我火速辦了婚禮,結(jié)果婚禮上忍啤,老公的妹妹穿的比我還像新娘加勤。我一直安慰自己,他們只是感情好同波,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布鳄梅。 她就那樣靜靜地躺著,像睡著了一般未檩。 火紅的嫁衣襯著肌膚如雪戴尸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天冤狡,我揣著相機與錄音孙蒙,去河邊找鬼项棠。 笑死,一個胖子當著我的面吹牛挎峦,可吹牛的內(nèi)容都是我干的香追。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼坦胶,長吁一口氣:“原來是場噩夢啊……” “哼翅阵!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起迁央,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤掷匠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后岖圈,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體讹语,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年蜂科,在試婚紗的時候發(fā)現(xiàn)自己被綠了顽决。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡导匣,死狀恐怖才菠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情贡定,我是刑警寧澤赋访,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站缓待,受9級特大地震影響蚓耽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜旋炒,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一步悠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瘫镇,春花似錦鼎兽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至通孽,卻和暖如春序宦,著一層夾襖步出監(jiān)牢的瞬間睁壁,已是汗流浹背背苦。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工互捌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人行剂。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓秕噪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親厚宰。 傳聞我的和親對象是個殘疾皇子腌巾,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容