自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

iOS9每天多了解一點(diǎn)5:Xcode Code Coverage Tools

移動開發(fā)
Code coverage 是一個(gè)計(jì)算你的單元測試覆蓋率的工具。高水平的覆蓋給你的單元測試帶來信心,也表明你的應(yīng)用被徹底的測試過了。你可能寫了幾千個(gè)單元測試,但如果覆蓋率不高,那么你寫的這套測試可能價(jià)值也不大。

[[144518]]

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

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

Code Coverage in Xcode

在過去,如果你想要制作一個(gè)測試的代碼覆蓋報(bào)告出來,需要設(shè)置很多[選項(xiàng)]。非常復(fù)雜,還有許多需要手動設(shè)置。在 iOS 9中,蘋果提供了智能的代碼覆蓋工具,他是和 LLVM 一體的,每次運(yùn)行測試都會被調(diào)用和計(jì)算。

Using the Code Coverage Tools

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

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

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

check word

 

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

tests

 

在運(yùn)行測試之前,我們必須先確認(rèn) code coverage 是否被打開了,寫代碼時(shí),默認(rèn)是關(guān)閉的。所以你需要編輯一下你的測試 scheme,把它打開。

turn on coverage

 

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

The Coverage Tab

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

打開Xcode左邊窗口的Report Navigator面板,選中你剛運(yùn)行的測試。然后在tab中選中 Coverage。

test coverage panel

 

這會展示一個(gè)你的類、方法的列表,并標(biāo)示出每個(gè)的測試覆蓋率。如果你將鼠標(biāo)懸停在checkWord這個(gè)方法上,你可以看到測試的覆蓋率是28%。不能接受啊!我們需要找到,那些代碼分支是能夠被測試執(zhí)行,那些是不能的,進(jìn)而改善他們。雙擊方法的名字,Xcode會打開類的代碼,并且看到code coverage的情況。

coverage result

 

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

Improving Coverage

很顯然,28%的覆蓋率不是我們的目標(biāo)。這里沒有 UI,看起來是個(gè)***的編寫測試用例的候選function。所以,我們添加一個(gè)測試用例。理想情況下,我們希望每個(gè)分支都能被測試到。這樣就能達(dá)到完整的覆蓋。添加下面的測試用例到你的測試類中。

test cases

 

這些測試用例應(yīng)該能夠完全覆蓋我們的代碼了。運(yùn)行一下單元,然后打開***一個(gè)測試報(bào)告。

the final coverage result

 

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

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

延伸閱讀

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

責(zé)任編輯:倪明 來源: Shinobi Controls
相關(guān)推薦

2015-07-27 09:04:33

ios9

2015-08-03 10:03:09

iosuistack vie

2015-07-21 16:43:13

IOSUI

2015-07-17 11:12:43

IOS搜索API

2021-06-02 18:46:13

監(jiān)控日志Prometheus

2011-03-15 10:41:05

內(nèi)部類

2015-07-16 12:59:19

IOS9UIDynamics

2015-10-16 14:27:29

iOS9collectionV特性

2015-09-16 09:55:12

ios9學(xué)習(xí)UIKit Dynam

2015-09-25 09:44:24

ios9MapkitTrans

2015-08-20 09:00:23

ios9api

2015-07-02 17:32:28

iOS 9蘋果

2015-08-24 09:24:21

ios學(xué)習(xí)contacts fr

2016-03-18 11:19:57

ios9replaykit入門

2015-08-07 09:06:50

ios9更新

2015-09-22 10:15:19

CocosXcode 7iOS9

2015-08-31 11:10:52

ios9內(nèi)容攔截器

2021-05-20 09:11:00

5G5G網(wǎng)絡(luò)5G終端

2019-04-16 15:05:59

ServerlessIT基礎(chǔ)局域網(wǎng)

2015-09-09 15:51:54

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號