XCTest-3-測試基礎(chǔ)

測試基礎(chǔ)

測試是你編寫的代碼力穗,用于執(zhí)行你的應(yīng)用程序和代碼庫里面的代碼气嫁,并生成通過或失敗的結(jié)果,根據(jù)一組預(yù)期進行衡量超全。

測試可以在執(zhí)行一些操作之后檢查對象的實例變量的狀態(tài),驗證代碼在遇到邊界條件時拋出特殊異常蛾坯,等等疏遏。對于性能測量測試,參考標準可以是期望一組例程運行到完成的最大時間量倘零。

定義測試范圍

所有軟件使用組合構(gòu)建; 也就是說戳寸,較小的組件被一起布置以形成具有更大功能的更大,更高級別的組件袖瞻,直到滿足項目的目標和要求拆吆。良好的測試實踐是具有涵蓋該組合物的所有水平的功能的測試枣耀。XCTest允許您為任何級別的組件編寫測試。

它是由你來定義什么構(gòu)成一個組件的測試 - 它可以是一個方法在一個類或一組方法捞奕,完成一個基本的目的缝彬。例如哺眯,它可以是一個算術(shù)運算,如在快速入門一章中用作計算器應(yīng)用程序的示例一疯。它可以是處理a的內(nèi)容UITableView和您在代碼的數(shù)據(jù)結(jié)構(gòu)中維護的名稱列表之間的交互的不同方法夺姑。這些方法和操作中的每一個意味著應(yīng)用程序功能的一個組件和一個檢查它的測試。用于測試的組件的行為應(yīng)該是完全確定的; 測試通過或失敗眉睹。

您可以將應(yīng)用程序的行為劃分為組件越多,您可以更有效地測試代碼的行為是否滿足您的項目增長和更改的所有細節(jié)中的參考標準慕蔚。對于具有許多組件的大型項目斋配,您需要運行大量測試來徹底測試項目。測試應(yīng)該設(shè)計為盡可能快地運行坏瞄,但是一些測試必然很大并且執(zhí)行得更慢甩卓。小型逾柿,快速運行的測試可以經(jīng)常運行,并且當有故障時使用鹿寻,以幫助診斷和解決問題容易毡熏。

為項目組件設(shè)計的測試是測試驅(qū)動開發(fā)的基礎(chǔ),這是一種寫代碼的風(fēng)格狱窘,在寫代碼之前編寫測試邏輯财搁。這種開發(fā)方法允許您在實現(xiàn)代碼之前為代碼編寫需求和邊緣情況。在編寫測試后搭儒,您將開發(fā)您的算法提茁,目的是通過測試。在您的代碼通過測試后铃岔,您有一個基礎(chǔ)峭火,您可以對您的代碼進行改進,有信心在下次運行測試時識別對預(yù)期行為的任何更改(這將導(dǎo)致產(chǎn)品中的錯誤)纺且。

即使您不使用測試驅(qū)動開發(fā)隆檀,測試也可以幫助您減少代碼中的錯誤引入,同時修改它以增強功能和功能恐仑。您可以在工作應(yīng)用程式中加入測試裳仆,確保未來的變更不會以您計劃的方式修改應(yīng)用程式現(xiàn)有的行為。當您修復(fù)錯誤時纯丸,您添加測試静袖,確認錯誤是固定的。測試應(yīng)該行使你的代碼坠陈,尋找預(yù)期的成功和預(yù)期的失敗捐康,以涵蓋所有的邊界條件解总。

注意:將測試添加到非設(shè)計時考慮測試的項目可能需要重新設(shè)計或重構(gòu)代碼的一部分,以便于測試刻盐。

附錄A:編寫可測試代碼包含編寫可測試代碼的
簡單指南乌昔,您可能會發(fā)現(xiàn)它們有用。

組件可以包含應(yīng)用程序各個部分之間的互動。由于某些類型的測試需要更長時間才能運行溺蕉,因此您可能只希望定期運行它們或僅在服務(wù)器上運行它們。正如你將在下面的章節(jié)中看到的疯特,你可以組織你的測試漓雅,并以許多不同的方式運行它們來滿足不同的需求。

性能測試

組件的測試本質(zhì)上可以是功能性的或測量性能组题。XCTest提供API來測量基于時間的性能抱冷,使您能夠以類似于功能合規(guī)性和回歸的方式跟蹤性能改進和回歸。

為了在測量性能時提供成功或失敗結(jié)果赵讯,測試必須具有要評估的基線边翼∶簦基線是測試方法的十次運行中的平均時間性能與每次運行的標準偏差的測量的組合。低于時間基線或從運行到運行變化太大的測試報告為故障斤寇。

注意 第一次運行性能測量測試時拥褂,XCTest總是報告失敗,因為基線未知莫秆。一旦您接受某個測量作為基線悔详,XCTest將評估并報告成功或失敗,并為您提供詳細查看測試結(jié)果的方法茄螃。

用戶界面測試

到目前為止討論的功能和性能測試通常被稱為單元測試,其中“單元”是您已經(jīng)根據(jù)粒度和級別決定的功能的組件用狱。單元測試主要涉及形成好的組件夏伊,其行為與預(yù)期的一樣,并且如預(yù)期地與其他組件交互咏连。從設(shè)計的角度來看鲁森,單元測試從內(nèi)部接近您的開發(fā)項目刀森,檢查組件是否滿足您的意圖。

用戶通過用戶界面與這些內(nèi)部代碼交互埠偿。用戶界面交互通常是粗糙的榜晦,更高級別的行為,采取外部活動和集成幾個組件(子系統(tǒng))的操作來調(diào)用您的應(yīng)用程序的功能抖剿。很難編寫單元測試來實現(xiàn)用戶通過用戶界面體驗到的交互识窿,而沒有設(shè)計用于從應(yīng)用程序上下文外部操作UI的特殊設(shè)施喻频。用這些特殊設(shè)施寫的測試稱為“UI測試”。

UI測試方法從外部表面測試應(yīng)用程序锻煌,用戶體驗它姻蚓。它們使您能夠編寫測試狰挡,將模擬事件發(fā)送到系統(tǒng)提供的和自定義UI對象释涛,捕獲這些對象的響應(yīng)跺讯,然后測試該響應(yīng)的正確性或性能刀脏,就像使用內(nèi)部導(dǎo)向的單元測試一樣超凳。

應(yīng)用和庫測試

Xcode提供兩種類型的單元測試上下文:應(yīng)用測試和庫測試轮傍。

應(yīng)用測試。應(yīng)用程序測試檢查應(yīng)用程序中代碼的正確行為杭跪,例如計算器應(yīng)用程序的算術(shù)運算示例驰吓。

庫測試。庫測試檢查動態(tài)庫和框架中的代碼的正確行為姑廉,而與在應(yīng)用程序的運行時中的使用無關(guān)翁涤。使用庫測試葵礼,您構(gòu)建單元測試,運用庫的組件扔涧。

使用這些測試上下文來測試項目有助于在代碼隨著時間演變時保持預(yù)期和預(yù)期的行為赁严。

XCTest - Xcode測試框架

XCTest是為您提供的測試框架疼约,從Xcode 5開始。

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

在Xcode 5中劝枣,XCTest與在OS X v10.8和OS X v10.9上運行以及與iOS 7和更高版本兼容汤踏。

在Xcode 6中,XCTest與在OS X v10.9和OS X v10.10上運行舔腾,以及與iOS 6和更高版本兼容溪胶。

在Xcode 7中,XCTest與在OS X v10.10和OS X v10.11上運行以及與iOS 6和更高版本兼容稳诚。

支持在OS X v10.11和iOS 9上運行UI測試哗脖,無論是在Simulator和設(shè)備上。

有關(guān)更多詳細的版本兼容性信息扳还,請參閱Xcode發(fā)行說明才避。

Xcode XCTest.framework融入您的項目。此框架提供了API氨距,讓您設(shè)計測試并在代碼上運行它們桑逝。有關(guān)XCTest框架的詳細信息俏让,請參閱XCTest框架參考楞遏。

注意: 有關(guān)將OCUnit遷移到XCTest的信息,請參閱附錄B:從OCUnit轉(zhuǎn)換到XCTest首昔。

測試時從哪里開始

當您開始創(chuàng)建測試時寡喝,請記住以下想法:

當創(chuàng)建單元測試時,專注于測試代碼的最基本的基礎(chǔ)沙廉,Model類和方法拘荡,它們與Controller交互。

您的應(yīng)用程序的高級框圖很可能有Model撬陵,View和Controller類 - 這是一個熟悉的設(shè)計模式珊皿,任何人誰一直在使用Cocoa和Cocoa Touch。當你編寫測試來覆蓋所有的Model類時巨税,你將有確定的知道你的應(yīng)用程序的基礎(chǔ)是經(jīng)過良好的測試蟋定,然后你的方式來編寫Controller類的測試 - 開始接觸其他更復(fù)雜部分應(yīng)用程序,例如草添,連接到網(wǎng)絡(luò)與連接在Web服務(wù)后面的數(shù)據(jù)庫驶兜。

作為一個替代的起點,如果你正在創(chuàng)作一個框架或庫远寸,你可能想從你的API的表面開始抄淑。從那里,你可以工作你的方式在內(nèi)部類驰后。

在創(chuàng)建UI測試時肆资,首先考慮最常見的工作流程。想想當用戶開始使用應(yīng)用程序和在該過程中立即執(zhí)行什么UI時灶芝,用戶做什么郑原。使用UI記錄特征是將用戶動作序列捕獲到UI測試方法中的好方法唉韭,該UI測試方法可以被擴展以實現(xiàn)正確性和/或性能的測試。

這種類型的UI測試傾向于以相對粗粒度的焦點開始犯犁,并且可能跨越幾個子系統(tǒng); 它們可以返回很多可能很難分析的信息属愤。當您使用UI測試套件時,您可以細化測試粒度和聚焦UI測試酸役,以更清晰地反映特定子系統(tǒng)的行為住诸。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市簇捍,隨后出現(xiàn)的幾起案子只壳,更是在濱河造成了極大的恐慌俏拱,老刑警劉巖暑塑,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異锅必,居然都是意外死亡事格,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門搞隐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來驹愚,“玉大人,你說我怎么就攤上這事劣纲》贽啵” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵癞季,是天一觀的道長劫瞳。 經(jīng)常有香客問我,道長绷柒,這世上最難降的妖魔是什么志于? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮废睦,結(jié)果婚禮上伺绽,老公的妹妹穿的比我還像新娘。我一直安慰自己嗜湃,他們只是感情好奈应,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著购披,像睡著了一般杖挣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上今瀑,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天程梦,我揣著相機與錄音点把,去河邊找鬼。 笑死屿附,一個胖子當著我的面吹牛郎逃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播挺份,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼褒翰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了匀泊?” 一聲冷哼從身側(cè)響起优训,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎各聘,沒想到半個月后揣非,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡躲因,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年早敬,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片大脉。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡搞监,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出镰矿,到底是詐尸還是另有隱情琐驴,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布秤标,位于F島的核電站绝淡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏抛杨。R本人自食惡果不足惜够委,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望怖现。 院中可真熱鬧茁帽,春花似錦、人聲如沸屈嗤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饶号。三九已至铁追,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間茫船,已是汗流浹背琅束。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工扭屁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人涩禀。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓料滥,卻偏偏與公主長得像,于是被迫代替她去往敵國和親艾船。 傳聞我的和親對象是個殘疾皇子葵腹,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348

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