iOS 9 學習系列:Xcode Code Coverage Tools

來源:互聯網
上載者:User

標籤:

Code coverage 是一個計算你的單元測試覆蓋率的工具。高水平的覆蓋給你的單元測試帶來信心,也表明你的應用被徹底的測試過了。你可能寫了幾千個單元測試,但如果覆蓋率不高,那麼你寫的這套測試可能價值也不大。

這裡並沒有一個確切的百分比,要求你必須到達這個覆蓋率。這很大程度上取決於你的項目(的具體情況)。譬如說,如果你的項目中有很多不能寫單元測試的視覺組件,那麼覆蓋率就會比單純處理資料的架構要低的多。

Code Coverage in Xcode

在過去,如果你想要製作一個測試的代碼覆蓋報告出來,需要設定很多[選項]。非常複雜,還有許多需要手動設定。在 iOS 9中,蘋果提供了智能的代碼覆蓋工具,他是和 LLVM 一體的,每次運行測試都會被調用和計算。

Using the Code Coverage Tools

現在我們用一個例子來展示,如何使用新的 code coverage 工具和怎樣提升現在的測試案例。完成後的代碼放在了 Github 上,你可以跟著做。

第一件事是建立一個新項目,並確認你選上了Unit tests選項。這會按要求建立一個預設項目,現我們需要測試點什麼。這個測試可能是你的任意需求,這裡我添加一個空的 swift 檔案,裡面寫好了一個全域的方法。這個方法檢測兩個字母串是否是僅排序不同的相同字母組成的詞。寫成全域的方法,可能不是好的設計,但這裡我們僅示範一下。

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

一旦你寫好了演算法,就該寫個測試了。開啟項目建立時已經建立好了的預設的XCTestCase,添加一個下面的簡單的測試方法。他看起來是這樣子的。

在運行測試之前,我們必須先確認 code coverage 是否被開啟了,寫代碼時,預設是關閉的。所以你需要編輯一下你的測試 scheme,把它開啟。

確保"Gather coverage data"是被選中的,然後點擊關閉按鈕,運行測試的 target. 我們希望剛剛建立的測試案例能夠順利通過。

The Coverage Tab

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

開啟Xcode左邊視窗的Report Navigator面板,選中你剛啟動並執行測試。然後在tab中選中 Coverage。

這會展示一個你的類、方法的列表,並標示出每個的測試覆蓋率。如果你將滑鼠移至上方在checkWord這個方法上,你可以看到測試的覆蓋率是28%。不能接受啊!我們需要找到,那些代碼分支是能夠被測試執行,那些是不能的,進而改善他們。雙擊方法的名字,Xcode會開啟類的代碼,並且看到code coverage的情況。

白色的地區表示這些代碼時測試覆蓋過的。灰色地區時測試無法覆蓋的,我們需要添加更多的測試案例來覆蓋灰色部分的代碼。在右手邊的數字,表明這些代碼塊,在這次測試中被執行的次數。

Improving Coverage

很顯然,28%的覆蓋率不是我們的目標。這裡沒有 UI,看起來是個完美的編寫測試案例的候選function。所以,我們添加一個測試案例。理想情況下,我們希望每個分支都能被測試到。這樣就能達到完整的覆蓋。添加下面的測試案例到你的測試類別中。

這些測試案例應該能夠完全覆蓋我們的代碼了。運行一下單元,然後開啟最後一個測試報告。

我們成功了,100%的覆蓋率。你可以看到整個代碼都變成了白色,右面的數字也展示了每個程式碼片段至少被執行了一次。

使用code coverage是一個非常棒的方式,幫你建立真正有價值的測試混合。遠好於你寫了很多測試案例,但沒有真正測試到代碼。Xcode 7 讓這種方式變的非常簡單,我推薦你在項目中開啟 Code Coverage。即使你已經寫好了測試,也可以幫你知道到底測試寫的怎麼樣。

延伸閱讀

更多關於Xcode 7 中 Code Coverage 工具的內容,我推薦你觀看 WWDC 2015 的session 410 Continuous Integration and Code Coverage in Xcode.最後,別忘了如果你想要試試我們上面的例子,可以在 Github 中找到他。

iOS 9 學習系列:Xcode Code Coverage Tools

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.