XCTest-10-編寫(xiě)可測(cè)試代碼以及從OCUnit轉(zhuǎn)換到XCTest

Xcode對(duì)測(cè)試的集成支持使您能夠以各種方式編寫(xiě)測(cè)試來(lái)支持你的開(kāi)發(fā)工作。你可以使用測(cè)試來(lái)檢測(cè)代碼中的潛在回歸曼振,以發(fā)現(xiàn)預(yù)期的成功和失敗府蛇,并驗(yàn)證應(yīng)用程序的行為。測(cè)試通過(guò)確保對(duì)象以預(yù)期的方式運(yùn)行來(lái)提高代碼的穩(wěn)定性。

當(dāng)然,通過(guò)測(cè)試實(shí)現(xiàn)的穩(wěn)定性水平取決于您編寫(xiě)的測(cè)試的質(zhì)量忌穿。同樣,編寫(xiě)好測(cè)試的容易性取決于你編寫(xiě)代碼的方法井佑。編寫(xiě)用于測(cè)試的代碼有助于確保編寫(xiě)良好的測(cè)試。請(qǐng)閱讀以下準(zhǔn)則姆另,以確保您的代碼是可測(cè)試的,并簡(jiǎn)化編寫(xiě)良好測(cè)試的過(guò)程。

指南

定義API要求。為你添加到項(xiàng)目中的每個(gè)方法或函數(shù)定義需求和結(jié)果很重要。對(duì)于需求水泉,包括輸入和輸出范圍蟹漓,拋出的異常和它們引發(fā)的條件,以及返回的值的類(lèi)型(特別是如果值是類(lèi)的實(shí)例)卿嘲。指定需求并確保代碼中滿(mǎn)足要求有助于您編寫(xiě)強(qiáng)大放前,安全的代碼葱她。

有關(guān)使用例外來(lái)識(shí)別和報(bào)告客戶(hù)端代碼的不正確的庫(kù)使用情況的示例炒辉,請(qǐng)參閱單元測(cè)試應(yīng)用和框架示例代碼項(xiàng)目。

在編寫(xiě)代碼時(shí)寫(xiě)測(cè)試用例。在設(shè)計(jì)和編寫(xiě)每個(gè)方法或函數(shù)時(shí)榛做,編寫(xiě)一個(gè)或多個(gè)測(cè)試用例以確保滿(mǎn)足API的要求轰传。記住,為現(xiàn)有代碼編寫(xiě)測(cè)試比編寫(xiě)代碼更困難。

檢查邊界條件实蓬。如果方法的參數(shù)必須具有特定范圍內(nèi)的值艇炎,則測(cè)試應(yīng)傳遞包含范圍的最低和最高值的值驴娃。例如厚棵,如果一個(gè)程序具有可以具有的值之間的一個(gè)整數(shù)參數(shù)0和100彬犯,具有包容性逻卖,該方法的測(cè)試代碼應(yīng)該通過(guò)的值0,50和100輸入?yún)?shù)。

使用隱性測(cè)試。負(fù)測(cè)試確保您的代碼適當(dāng)?shù)仨憫?yīng)錯(cuò)誤條件消约。驗(yàn)證您的代碼在接收無(wú)效或意外的輸入值時(shí)運(yùn)行正確氯材。還驗(yàn)證它返回錯(cuò)誤代碼或引發(fā)異常時(shí)應(yīng)該。例如,如果一個(gè)整數(shù)參數(shù)必須在范圍內(nèi)的值0到100,包容嫉称,創(chuàng)建測(cè)試用例值傳遞-1并101確保了過(guò)程引發(fā)一個(gè)例外或返回錯(cuò)誤代碼氮趋。

編寫(xiě)全面的測(cè)試用例祥国。全面的測(cè)試結(jié)合了不同的代碼模塊來(lái)實(shí)現(xiàn)API的一些更復(fù)雜的行為觉至。雖然簡(jiǎn)單应闯,孤立的測(cè)試提供價(jià)值,堆疊測(cè)試執(zhí)行復(fù)雜的行為,并往往抓住更多的問(wèn)題。這些類(lèi)型的測(cè)試在更現(xiàn)實(shí)的條件下模擬代碼的行為。例如晚树,除了將對(duì)象添加到數(shù)組之外宝鼓,還可以創(chuàng)建數(shù)組柠座,向其中添加多個(gè)對(duì)象,使用不同的方法刪除其中幾個(gè)對(duì)象,然后確保剩余對(duì)象的集合和數(shù)量是正確的。

用測(cè)試用例覆蓋你的錯(cuò)誤修復(fù)歪泳。每當(dāng)你修復(fù)一個(gè)錯(cuò)誤,寫(xiě)一個(gè)或多個(gè)測(cè)試用例來(lái)驗(yàn)證修復(fù)。

****從OCUnit轉(zhuǎn)換到XCTest****

XCTest是用Xcode 5引入的測(cè)試框架级遭。一些較舊的項(xiàng)目可能仍然使用OCUnit挫鸽,上一代測(cè)試框架蚂夕。更新項(xiàng)目以使用XCTest等脂,你可以利用XCTest提供的所有新功能和功能。

從OCUnit到XCTest的轉(zhuǎn)換是一個(gè)復(fù)雜的操作携狭,包括更新包含測(cè)試類(lèi)和修改項(xiàng)目設(shè)置的源文件灵莲。Xcode包括一個(gè)遷移器雕凹,以便為你實(shí)現(xiàn)這些更改,方法是選擇“編輯”>“轉(zhuǎn)換”>“到XCTest”政冻。

重要: 從Xcode 8開(kāi)始枚抵,遷移器工具不再可用。但是明场,你仍然可以手動(dòng)更新項(xiàng)目汽摹,如手動(dòng)將OCUnit 轉(zhuǎn)換為XCTest所述

將OCUnit轉(zhuǎn)換為XCTest遷移器在當(dāng)前方案的目標(biāo)上工作苦锨。遷移器檢查所選目標(biāo)逼泣,并建議一組自動(dòng)轉(zhuǎn)換的源更改趴泌。

注意: 建議在執(zhí)行OCUnit到XCTest遷移時(shí)轉(zhuǎn)換項(xiàng)目中的所有測(cè)試目標(biāo)。

要將項(xiàng)目從OCUnit更新到XCTest:

1.選擇使用方案菜單構(gòu)建測(cè)試目標(biāo)的方案拉庶。
例如嗜憔,在這個(gè)較舊的工作區(qū)中有MacOS和iOS的計(jì)算器項(xiàng)目,以及基于OCUnit的測(cè)試氏仗。使用工具欄上的方案編輯器菜單:

方案編輯菜單

在出現(xiàn)的菜單中吉捶,選擇構(gòu)建Mac_Calc_ApplicationTests目標(biāo)的方案,以使其成為活動(dòng)方案皆尔。

示意圖

2.選擇“編輯”>“轉(zhuǎn)換”>“XCTest”

轉(zhuǎn)換成為XCTest

3.單擊下一步以移至下一個(gè)工作表呐舔。

4.在顯示的工作表中,選擇要轉(zhuǎn)換的測(cè)試目標(biāo)慷蠕。

選擇要轉(zhuǎn)換的測(cè)試目標(biāo)

要查看特定目標(biāo)是否在轉(zhuǎn)換后使用XCTest構(gòu)建珊拼,請(qǐng)單擊其名稱(chēng)。

5.單擊下一步按鈕流炕。

助手提供了一個(gè)FileMerge接口澎现,你可以在其中逐個(gè)文件地評(píng)估源更改。

示意圖

更新的源文件在左側(cè)浪感,原始文件在右側(cè)昔头。你可以?huà)呙杷袧撛诘母模G棄你認(rèn)為有問(wèn)題的更改影兽。

6.在你確認(rèn)所有更改都有效后揭斧,請(qǐng)點(diǎn)擊保存按鈕。

Xcode將更改寫(xiě)入文件峻堰。

轉(zhuǎn)換完成后讹开,運(yùn)行測(cè)試目標(biāo)并檢查其輸出,以確保測(cè)試正常運(yùn)行捐名。如果出現(xiàn)任何問(wèn)題旦万,請(qǐng)參閱“ 調(diào)試測(cè)試”一章以確定要做什么。

手動(dòng)從OCUnit轉(zhuǎn)換為XCTest

如果OCUnit到XCTest遷移器無(wú)法轉(zhuǎn)換你的項(xiàng)目镶蹋,或者如果你使用Xcode 8或更高版本成艘,則仍然可以使用以下過(guò)程手動(dòng)遷移項(xiàng)目:

1.向項(xiàng)目添加新的XCTest測(cè)試目標(biāo)。

2.將測(cè)試類(lèi)和方法的實(shí)現(xiàn)文件添加到新的測(cè)試目標(biāo)贺归。

3.編輯測(cè)試類(lèi)#import <XCTest/XCTest.h>并在測(cè)試方法中使用XCTest斷言淆两。

使用此方法可確保為XCTest測(cè)試目標(biāo)正確配置項(xiàng)目設(shè)置。與使用遷移器時(shí)一樣拂酣,運(yùn)行測(cè)試目標(biāo)秋冰,并在完成轉(zhuǎn)換后檢查其輸出,以確保測(cè)試按預(yù)期運(yùn)行婶熬。如果出現(xiàn)任何問(wèn)題剑勾,請(qǐng)參閱“ 調(diào)試測(cè)試”一章以確定要做什么埃撵。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市虽另,隨后出現(xiàn)的幾起案子暂刘,更是在濱河造成了極大的恐慌,老刑警劉巖洲赵,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸳惯,死亡現(xiàn)場(chǎng)離奇詭異商蕴,居然都是意外死亡叠萍,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)绪商,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)苛谷,“玉大人,你說(shuō)我怎么就攤上這事格郁「沟睿” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵例书,是天一觀的道長(zhǎng)锣尉。 經(jīng)常有香客問(wèn)我,道長(zhǎng)决采,這世上最難降的妖魔是什么自沧? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮树瞭,結(jié)果婚禮上拇厢,老公的妹妹穿的比我還像新娘。我一直安慰自己晒喷,他們只是感情好孝偎,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著凉敲,像睡著了一般衣盾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上爷抓,一...
    開(kāi)封第一講書(shū)人閱讀 49,764評(píng)論 1 290
  • 那天势决,我揣著相機(jī)與錄音,去河邊找鬼废赞。 笑死徽龟,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的唉地。 我是一名探鬼主播据悔,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼传透,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了极颓?” 一聲冷哼從身側(cè)響起朱盐,我...
    開(kāi)封第一講書(shū)人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎菠隆,沒(méi)想到半個(gè)月后兵琳,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡骇径,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年躯肌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片破衔。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡清女,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出晰筛,到底是詐尸還是另有隱情嫡丙,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布读第,位于F島的核電站曙博,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏怜瞒。R本人自食惡果不足惜父泳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望盼砍。 院中可真熱鬧尘吗,春花似錦、人聲如沸浇坐。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)近刘。三九已至擒贸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間觉渴,已是汗流浹背介劫。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留案淋,地道東北人座韵。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親誉碴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子宦棺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

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