翻譯:使用Xcode測(cè)試(二)——測(cè)試基礎(chǔ)(Testing Basics)

測(cè)試代碼是用于檢測(cè)你的應(yīng)用程序和庫(kù)代碼抵栈,根據(jù)預(yù)期返回一個(gè)通過(guò)或失敗結(jié)果。測(cè)試可能會(huì)檢查某個(gè)對(duì)象在執(zhí)行某些操作后實(shí)例變量的狀態(tài)坤次,驗(yàn)證你的代碼在邊界條件的情況下拋出的特定異常古劲,等等。對(duì)于一個(gè)性能測(cè)試缰猴,參考標(biāo)準(zhǔn)可能是在最大的時(shí)間內(nèi)完成你希望運(yùn)行的程序产艾。

定義測(cè)試范圍

所有軟件都是由組件構(gòu)建,也就是說(shuō)滑绒,小組件在一起形成大組件闷堡,高級(jí)別組件有更多的功能直到項(xiàng)目需求被滿足。最佳測(cè)試實(shí)踐是所有測(cè)試覆蓋這個(gè)組件的所有層次功能疑故。XCTest允許你為組件的任何層次編寫測(cè)試代碼杠览。

它取決于你測(cè)試組件的哪一部分,它可以是一個(gè)類或一組完成基本目標(biāo)的一組方法纵势。例如踱阿,它可以是算術(shù)運(yùn)算管钳,如快速入門章節(jié)的計(jì)算器應(yīng)用∪砩啵可能有不同方法處理TableView內(nèi)容和數(shù)據(jù)結(jié)構(gòu)之間的交互才漆。這些方法和運(yùn)算每一個(gè)都意味著應(yīng)用程序的功能組成部分,都可以測(cè)試葫隙。測(cè)試組件的行為完全是確定的栽烂,要么測(cè)試通過(guò)要么失敗。

當(dāng)你的項(xiàng)目在不斷的增長(zhǎng)和變化時(shí)恋脚,可以把應(yīng)用行為劃分為組件腺办,可以更有效的測(cè)試你的代碼行為是否符合所有細(xì)節(jié)的參考標(biāo)準(zhǔn)。對(duì)于有許多組件的大項(xiàng)目糟描,你需要運(yùn)行大量的測(cè)試來(lái)對(duì)項(xiàng)目進(jìn)行徹底的測(cè)試怀喉。盡量設(shè)計(jì)測(cè)試可以快速運(yùn)行,但不可避免有些測(cè)試很大并且執(zhí)行的緩慢船响。小的快速運(yùn)行的測(cè)試可以經(jīng)常使用躬拢,當(dāng)返回失敗時(shí)有助于診斷和解決問(wèn)題。

為項(xiàng)目組件設(shè)計(jì)測(cè)試時(shí)測(cè)試驅(qū)動(dòng)開發(fā)的基礎(chǔ)见间,在編寫要測(cè)試的代碼前先編寫測(cè)試代碼聊闯。這種開發(fā)方式讓你在實(shí)現(xiàn)功能前考慮代碼的要求和邊界情況。在編寫完測(cè)試代碼后米诉,你開發(fā)你的算法通過(guò)測(cè)試菱蔬。在你的代碼通過(guò)測(cè)試后,你對(duì)代碼的改進(jìn)有一個(gè)基礎(chǔ)史侣,在下次運(yùn)行測(cè)試時(shí)拴泌,對(duì)預(yù)期行為的任何變化(這通常導(dǎo)致產(chǎn)品中的bug)都有信心。

即使你沒有使用測(cè)試驅(qū)動(dòng)開發(fā)惊橱,測(cè)試可以幫助你減少在代碼中引入的bug蚪腐,提高功能和性能。你可以在工作的應(yīng)用中引入測(cè)試確保未來(lái)的變更不會(huì)修改應(yīng)用現(xiàn)有行為税朴。當(dāng)你修復(fù)bug時(shí)回季,添加測(cè)試確認(rèn)測(cè)試被修復(fù)。測(cè)試應(yīng)該檢查你的代碼正林,覆蓋所有的邊界條件茧跋,查找預(yù)期失敗或預(yù)期通過(guò)。

注意:添加測(cè)試到?jīng)]有設(shè)計(jì)測(cè)試的項(xiàng)目中可能需要重新設(shè)計(jì)或重構(gòu)部分代碼使之更容易測(cè)試卓囚。附錄A:編寫可測(cè)試代碼( Appendix A: Writing Testable Code)包含編寫可測(cè)試代碼的簡(jiǎn)單指南瘾杭。

組件可以包含應(yīng)用不同部分的交互。因?yàn)槟承y(cè)試需要更長(zhǎng)的時(shí)間允許哪亿,你可能希望定期或在某個(gè)服務(wù)器上運(yùn)行測(cè)試粥烁。正如你在下一章中看到的贤笆,你可以組織你的測(cè)試并用許多不同的運(yùn)行方式來(lái)滿足不同需求。

性能測(cè)試

測(cè)試組件可以是功能測(cè)試或性能測(cè)試讨阻。XCTest提供API衡量時(shí)間性能芥永,使你可以跟蹤性能改進(jìn)和回歸測(cè)試。

為了讓性能測(cè)試返回成功或失敗钝吮,測(cè)試必須提供一個(gè)基準(zhǔn)來(lái)評(píng)估埋涧。基準(zhǔn)是十次運(yùn)行測(cè)試方法與衡量標(biāo)準(zhǔn)偏差的平均時(shí)間奇瘦。低于時(shí)間基準(zhǔn)或多次運(yùn)行相差太大均為失敗棘催。

注意:當(dāng)你第一次運(yùn)行性能測(cè)試時(shí),XCTest總是會(huì)失敗耳标,是因?yàn)榛鶞?zhǔn)未知醇坝。一旦你設(shè)置特定的值為基準(zhǔn)時(shí),XCTest會(huì)評(píng)估并返回成功或失敗次坡,并為你提供測(cè)試結(jié)果的詳情呼猪。

用戶界面測(cè)試

到目前為止討論的功能和性能測(cè)試通常被稱為單元測(cè)試,其中單元是你決定測(cè)試功能的粒度和級(jí)別砸琅。單元測(cè)試主要關(guān)心組件是否是預(yù)期的行為宋距,及與其他組件進(jìn)行預(yù)期交互行為。從設(shè)計(jì)的角度來(lái)看症脂,單元測(cè)試是從開發(fā)項(xiàng)目的內(nèi)部審查滿足你需求的組件谚赎。

用戶通過(guò)用戶界面與你的代碼交互。用戶界面的交互通常都是粗粒度更加高層次的行為摊腋,使用外部活動(dòng)、集成的幾個(gè)組件(子系統(tǒng))來(lái)調(diào)用你的應(yīng)用程序功能嘁傀。沒有專門為用戶界面設(shè)計(jì)的組件兴蒸,并在程序之外操作用戶界面,很難編寫單元測(cè)試用來(lái)檢查用戶界面的用戶體驗(yàn)细办。這些特殊的組件叫做“UI測(cè)試”橙凳。

UI測(cè)試在應(yīng)用外部測(cè)試應(yīng)用,作為用戶來(lái)體驗(yàn)它笑撞。讓你可以編寫測(cè)試并發(fā)送模擬事件給系統(tǒng)提供的和自定義的UI對(duì)象岛啸,捕獲這些對(duì)象的響應(yīng),然后測(cè)試響應(yīng)的正確性或想茴肥,就像你在單元測(cè)試中那樣坚踩。

應(yīng)用和庫(kù)測(cè)試

Xcode提供兩種類型的單元測(cè)試環(huán)境:應(yīng)用測(cè)試和庫(kù)測(cè)試

  • 應(yīng)用測(cè)試。應(yīng)用測(cè)試檢查應(yīng)用代碼行為是否正確瓤狐,例如計(jì)算器應(yīng)用的算術(shù)運(yùn)算瞬铸。
  • 庫(kù)測(cè)試批幌。庫(kù)測(cè)試檢查動(dòng)態(tài)庫(kù)和不依賴于應(yīng)用程序運(yùn)行時(shí)使用的框架代碼行為是否正確。使用庫(kù)測(cè)試你可以構(gòu)建單元測(cè)試檢查庫(kù)組件嗓节。

適當(dāng)?shù)氖褂眠@些環(huán)境測(cè)試你的項(xiàng)目荧缘,幫助你保持代碼與預(yù)期的行為一致。

XCTest——Xcode測(cè)試框架

提供給你的測(cè)試框架是XCTest拦宣,從Xcode5開始截粗。

關(guān)于版本和兼容性

  • 在Xcode5中,XCTest兼容運(yùn)行于OS X v10.8和OS X v10.9及iOS7及更高版本鸵隧。
  • 在Xcode6中绸罗,XCTest兼容運(yùn)行于OS X v10.9和OS X v10.10及iOS6及更高版本。
  • 在Xcode7中掰派,XCTest兼容運(yùn)行于OS X v10.10和OS X v10.11及iOS6及更高版本从诲。
  • UI測(cè)試支持運(yùn)行于OS X v10.11和iOS9的設(shè)備和模擬器。

版本兼容性的更詳細(xì)信息靡羡,參見Xcode版本說(shuō)明( Xcode Release Notes)系洛。

Xcode集成 XCTest.framework到你的項(xiàng)目。該框架提供設(shè)計(jì)測(cè)試并在代碼上運(yùn)行測(cè)試的API略步。XCTest框架的詳細(xì)信息描扯,參見XCTest 框架參考(XCTest Framework Reference)。

注意:Xcode包含OCUint測(cè)試更新項(xiàng)目遷移趟薄。關(guān)于OCUint遷移到XCTest的信息绽诚,參見附錄B:從OCUnit遷移到XCTest( Appendix B: Transitioning from OCUnit to XCTest)。

何時(shí)開始測(cè)試

當(dāng)你開始創(chuàng)建測(cè)試時(shí)杭煎,記住以下幾點(diǎn):

  • 在創(chuàng)建單元測(cè)試時(shí)恩够,專注于測(cè)試代碼的最基礎(chǔ)功能,與controller交互model類和方法羡铲。
  • 應(yīng)用的高層次代碼如Model蜂桶,View和Controller類,使用Cocoa和Cocoa Touch的程序員都熟悉該設(shè)計(jì)模式也切。當(dāng)你編寫測(cè)試覆蓋所有的Model類扑媚,在編寫Controller類測(cè)試代碼前,要確認(rèn)你的應(yīng)用很好的測(cè)試過(guò)雷恃。從Controller開始會(huì)接觸到應(yīng)用更復(fù)雜的部分疆股,例如,連接到網(wǎng)絡(luò)倒槐,web服務(wù)連接的數(shù)據(jù)庫(kù)旬痹。
  • 如果你正在編寫一個(gè)框架或庫(kù),你可能希望從API開始,從這里唱凯,可以開始測(cè)試內(nèi)部類羡忘。
  • 當(dāng)創(chuàng)建UI測(cè)試,首先考慮最常見的工作流磕昼。思考用戶開始使用app會(huì)做什么卷雕,以及在這個(gè)過(guò)程中用戶希望立即看到什么UI。使用UI記錄功能是捕獲用戶動(dòng)作的最好方式票从,可以擴(kuò)展UI測(cè)試方法實(shí)現(xiàn)測(cè)試準(zhǔn)確性或性能漫雕。
  • 這種類型的UI測(cè)試相對(duì)來(lái)說(shuō)是粗粒度的,可能會(huì)跨越幾個(gè)子系統(tǒng)峰鄙;他們可能返回很多信息浸间,最初會(huì)很難分析。當(dāng)你使用UI測(cè)試組件吟榴,你可以細(xì)化測(cè)試粒度并聚焦UI測(cè)試魁蒜,更清楚的反映子系統(tǒng)行為。

官方原文地址:

https://developer.apple.com/library/ios/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/03-testing_basics.html#//apple_ref/doc/uid/TP40014132-CH3-SW1

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末吩翻,一起剝皮案震驚了整個(gè)濱河市兜看,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌狭瞎,老刑警劉巖细移,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異熊锭,居然都是意外死亡弧轧,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門碗殷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)精绎,“玉大人,你說(shuō)我怎么就攤上這事锌妻〈耍” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵从祝,是天一觀的道長(zhǎng)襟己。 經(jīng)常有香客問(wèn)我引谜,道長(zhǎng)牍陌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任员咽,我火速辦了婚禮毒涧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘贝室。我一直安慰自己契讲,他們只是感情好仿吞,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著捡偏,像睡著了一般唤冈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上银伟,一...
    開封第一講書人閱讀 49,821評(píng)論 1 290
  • 那天你虹,我揣著相機(jī)與錄音,去河邊找鬼彤避。 笑死傅物,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的琉预。 我是一名探鬼主播董饰,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼圆米!你這毒婦竟也來(lái)了卒暂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤榨咐,失蹤者是張志新(化名)和其女友劉穎介却,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體块茁,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡齿坷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了数焊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片永淌。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖佩耳,靈堂內(nèi)的尸體忽然破棺而出遂蛀,到底是詐尸還是另有隱情,我是刑警寧澤干厚,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布李滴,位于F島的核電站,受9級(jí)特大地震影響蛮瞄,放射性物質(zhì)發(fā)生泄漏所坯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一挂捅、第九天 我趴在偏房一處隱蔽的房頂上張望芹助。 院中可真熱鬧,春花似錦、人聲如沸状土。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蒙谓。三九已至斥季,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間累驮,已是汗流浹背泻肯。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留慰照,地道東北人灶挟。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像毒租,于是被迫代替她去往敵國(guó)和親稚铣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

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