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”
3.單擊下一步以移至下一個(gè)工作表呐舔。
4.在顯示的工作表中,選擇要轉(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è)試”一章以確定要做什么埃撵。