這是一個系列文章辞色,查看更多請移步目錄頁
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%覆蓋的測試覆蓋率草描。
一旦你寫好了算法,就該寫個測試了漓藕。打開項目創(chuàng)建時已經(jīng)創(chuàng)建好了的默認的XCTestCase,添加一個下面的簡單的測試方法陶珠。他看起來是這樣子的。
在運行測試之前享钞,我們必須先確認 code coverage 是否被打開了揍诽,寫代碼時,默認是關(guān)閉的栗竖。所以你需要編輯一下你的測試 scheme暑脆,把它打開。
確保"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。
這會展示一個你的類豌蟋、方法的列表廊散,并標示出每個的測試覆蓋率。如果你將鼠標懸停在checkWord這個方法上梧疲,你可以看到測試的覆蓋率是28%允睹。不能接受笆┓!我們需要找到擂找,那些代碼分支是能夠被測試執(zhí)行戳吝,那些是不能的,進而改善他們贯涎。雙擊方法的名字听哭,Xcode會打開類的代碼,并且看到code coverage的情況塘雳。
白色的區(qū)域表示這些代碼時測試覆蓋過的陆盘。灰色區(qū)域時測試無法覆蓋的败明,我們需要添加更多的測試用例來覆蓋灰色部分的代碼隘马。在右手邊的數(shù)字,表明這些代碼塊妻顶,在這次測試中被執(zhí)行的次數(shù)酸员。
Improving Coverage
很顯然,28%的覆蓋率不是我們的目標讳嘱。這里沒有 UI幔嗦,看起來是個完美的編寫測試用例的候選function。所以沥潭,我們添加一個測試用例邀泉。理想情況下,我們希望每個分支都能被測試到钝鸽。這樣就能達到完整的覆蓋汇恤。添加下面的測試用例到你的測試類中。
這些測試用例應(yīng)該能夠完全覆蓋我們的代碼了拔恰。運行一下單元因谎,然后打開最后一個測試報告。
我們成功了仁连,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 中找到他唠梨。
這是一個系列文章袋励,查看更多請移步目錄頁