iOS 9 学习系列: Xcode Code Coverage
Code coverage 是一個計算你的單元測試覆蓋率的工具。
高水平的覆蓋給你的單元測試帶來信心。也表明你的應用被徹底的測試過了。
你可能寫了幾千個單元測試,但假設覆蓋率不高。那么你寫的這套測試可能價值也不大。
這里并沒有一個確切的百分比,要求你必須到達這個覆蓋率。這非常大程度上取決于你的項目(的詳細情況)。
譬如說,假設你的項目中有非常多不能寫單元測試的視覺組件,那么覆蓋率就會比單純處理數據的框架要低的多。
Code Coverage in Xcode
在過去,假設你想要制作一個測試的代碼覆蓋報告出來,須要設置非常多[選項]。
非常復雜,還有很多須要手動設置。
在 iOS 9中,蘋果提供了智能的代碼覆蓋工具,他是和 LLVM 一體的。每次執行測試都會被調用和計算。
Using the Code Coverage Tools
如今我們用一個樣例來展示,如何使用新的 code coverage 工具和如何提升如今的測試用例。完畢后的代碼放在了 Github 上,你能夠跟著做。
第一件事是創建一個新項目。并確認你選上了Unit tests選項。
這會按要求創建一個默認項目,現我們須要測試點什么。這個測試可能是你的隨意需求,這里我加入一個空的 swift 文件,里面寫好了一個全局的方法。
這種方法檢測兩個字母串是否是僅排序不同的同樣字母組成的詞。
寫成全局的方法,可能不是好的設計,但這里我們僅演示一下。
這是一個相對簡單的方法。所以我們可能會得到一個沒有不論什么問題的。100%覆蓋的測試覆蓋率。
check word
一旦你寫好了算法,就該寫個測試了。打開項目創建時已經創建好了的默認的XCTestCase,加入一個以下的簡單的測試方法。他看起來是這樣子的。
tests
在執行測試之前,我們必須先確認 code coverage 是否被打開了,寫代碼時,默認是關閉的。所以你須要編輯一下你的測試 scheme,把它打開。
turn on coverage
確保"Gather coverage data"是被選中的。然后點擊關閉button,執行測試的 target. 我們希望剛剛創建的測試用例可以順利通過。
The Coverage Tab
一旦這個測試通過了。你就能知道 checkWord 這種方法,至少有一條路徑是對的。但你不知道的是。還多多少沒有被測試到。
這就是code coverage這個工具的優點。當你打開code coverage tab后,你能夠清楚的看到測試的覆蓋情況。他們按找 target, file, function 進行了自己主動分組。
打開Xcode左邊窗體的Report Navigator面板,選中你剛執行的測試。
然后在tab中選中 Coverage。
test coverage panel
這會展示一個你的類、方法的列表,并標示出每一個的測試覆蓋率。假設你將鼠標懸停在checkWord這種方法上,你可以看到測試的覆蓋率是28%。
不能接受啊!我們須要找到。那些代碼分支是可以被測試運行。那些是不能的,進而改善他們。雙擊方法的名字,Xcode會打開類的代碼,而且看到code coverage的情況。
coverage result
白色的區域表示這些代碼時測試覆蓋過的。
灰色區域時測試無法覆蓋的,我們須要加入很多其它的測試用例來覆蓋灰色部分的代碼。
在右手邊的數字,表明這些代碼塊,在這次測試中被運行的次數。
Improving Coverage
非常顯然,28%的覆蓋率不是我們的目標。
這里沒有 UI,看起來是個完美的編寫測試用例的候選function。所以,我們加入一個測試用例。
理想情況下,我們希望每一個分支都能被測試到。
這樣就能達到完整的覆蓋。加入以下的測試用例到你的測試類中。
test cases
這些測試用例應該可以全然覆蓋我們的代碼了。執行一下單元。然后打開最后一個測試報告。
the final coverage result
我們成功了,100%的覆蓋率。
你能夠看到整個代碼都變成了白色,右面的數字也展示了每一個代碼段至少被運行了一次。
使用code coverage是一個很棒的方式,幫你建立真正有價值的測試組合。遠好于你寫了許多測試用例,但沒有真正測試到代碼。
Xcode 7 讓這樣的方式變的很easy,我推薦你在項目中開啟 Code Coverage。即使你已經寫好了測試。也能夠幫你知道究竟測試寫的怎么樣。
Demo在Github地址: https://github.com/fish-yan/XCode-Code-Coverage
轉載于:https://www.cnblogs.com/lytwajue/p/7388364.html
總結
以上是生活随笔為你收集整理的iOS 9 学习系列: Xcode Code Coverage的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【机器学习】异常检测算法(I)
- 下一篇: Spark MLlib编程API入门系列