Xcode中的單元測(cè)試

前言

前文說過,所謂單元測(cè)試就是針對(duì)代碼的最小單元進(jìn)行測(cè)試库继。通俗的說脊串,就是每寫一個(gè)類,都編寫相應(yīng)的測(cè)試類埋同;每寫一個(gè)屬性、函數(shù)棵红,對(duì)屬性凶赁、函數(shù)的每一個(gè)特性編寫相應(yīng)的測(cè)試方法。
單元測(cè)試的思想是逆甜,通過外部調(diào)用要測(cè)試的單元虱肄,看給定的輸入是否能有預(yù)期的輸出。Xcode對(duì)單元測(cè)試進(jìn)行了充分的支持和集成交煞,XCTest框架咏窿、測(cè)試導(dǎo)航欄、測(cè)試覆蓋率素征。
本文主要介紹一下單元測(cè)試的一些基本概念集嵌、方法和流程。對(duì)于MVC設(shè)計(jì)模式來說御毅,MVC三者之間的概念區(qū)別是非常大的根欧,那么這三者的單元測(cè)試也各有各的方法和特點(diǎn)。后面的文章將分別針對(duì)MVC的單元測(cè)試編寫進(jìn)行一些經(jīng)驗(yàn)性的總結(jié)

在Xcode中使用單元測(cè)試

下面通過一個(gè)最簡(jiǎn)單的案例亚享,來演示如何在Xcode中使用單元測(cè)試咽块,可分為如下5步:

  1. 創(chuàng)建測(cè)試target
    在新建項(xiàng)目時(shí),大家應(yīng)該有注意到一個(gè)叫作“Include Unit Tests”的可勾選項(xiàng)欺税,最簡(jiǎn)單的創(chuàng)建測(cè)試target的方式侈沪,就是直接在創(chuàng)建項(xiàng)目時(shí)勾選。如果要在已有項(xiàng)目中添加測(cè)試target晚凿,可以通過菜單欄File -> New -> Target -> iOS Unit Testing Bundle 來添加亭罪。
    如果添加完畢,項(xiàng)目導(dǎo)航器里多了一個(gè)名為“XXXTests”的組歼秽,同時(shí)項(xiàng)目多了相應(yīng)的target应役。

  2. 創(chuàng)建測(cè)試類
    有了測(cè)試target后,包里已經(jīng)默認(rèn)生成了一個(gè)測(cè)試類÷嵯椋可以通過 New -> File(或快捷鍵cmd+n) 選擇Unit Test Case Class 來新建測(cè)試類院崇,注意新建類時(shí)要選擇步驟1中創(chuàng)建的單元測(cè)試group和target。
    打開測(cè)試類文件后可以發(fā)現(xiàn)袍祖,我們實(shí)際上創(chuàng)建了一個(gè)XCTest框架的 XCTestCase子類底瓣。由于測(cè)試文件和源代碼在不同的bundle中,所以需要手動(dòng)導(dǎo)入源代碼bundle:@testable import XXX蕉陋。

  3. 創(chuàng)建測(cè)試方法
    首先注意到類已自動(dòng)重寫了setUp()tearDown()兩個(gè)方法捐凭,setUp()在執(zhí)行測(cè)試方法之前調(diào)用,用來進(jìn)行必要的配置和準(zhǔn)備工作凳鬓;tearDown()在執(zhí)行測(cè)試方法之后調(diào)用茁肠,用來進(jìn)行必要的清理和掃尾工作。
    接下來是最重要的編寫測(cè)試方法缩举,如測(cè)試一個(gè)Student類的init()方法垦梆,預(yù)期該方法將生成一個(gè)Student實(shí)例,其屬性name會(huì)被設(shè)置為默認(rèn)值“No Name”仅孩。
    首先要注意的是測(cè)試方法的命名:必須以test開頭奶赔,Xcode才會(huì)將其作為測(cè)試方法對(duì)待;建議將命名分為三個(gè)部分杠氢,以_隔開,第一部分test另伍,第二部分為要測(cè)試的方法鼻百,第三部分為要測(cè)試的特性。在本例中就可以命名為test_Init_NameShouldSetDefaultValue()
    在方法內(nèi)部經(jīng)過必要的處理后摆尝,通過XCTAssert的一系列方法温艇,如XCTAssertEqual XCTAssertNotNil等,對(duì)預(yù)期結(jié)果和執(zhí)行結(jié)果進(jìn)行斷言堕汞。
    func test_Init_NameShouldSetDefaultValue() {
    let s = Student()
    XCTAssertEqual(s.name, "No Name")
    }

  4. 執(zhí)行測(cè)試
    執(zhí)行測(cè)試可以通過菜單欄的 Product -> Test (或快捷鍵 cmd + u) 勺爱,點(diǎn)擊測(cè)試導(dǎo)航器中測(cè)試方法的三角或點(diǎn)擊測(cè)試方法左側(cè)邊欄的空心方塊來執(zhí)行

  5. 查看執(zhí)行結(jié)果
    若執(zhí)行測(cè)試通過,測(cè)試方法左側(cè)邊欄的方塊將變成綠色的勾讯检,若未通過琐鲁,會(huì)變成紅色的叉。
    另可以通過測(cè)試導(dǎo)航器來查看人灼,測(cè)試導(dǎo)航器是Xcode的導(dǎo)航器的第5個(gè)標(biāo)簽項(xiàng)围段,可以查看已有測(cè)試用例的結(jié)構(gòu)、新建測(cè)試target和class投放、執(zhí)行測(cè)試及顯示執(zhí)行結(jié)果奈泪。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子涝桅,更是在濱河造成了極大的恐慌拜姿,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冯遂,死亡現(xiàn)場(chǎng)離奇詭異蕊肥,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)债蜜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門晴埂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人寻定,你說我怎么就攤上這事儒洛。” “怎么了狼速?”我有些...
    開封第一講書人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵琅锻,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我向胡,道長(zhǎng)恼蓬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任僵芹,我火速辦了婚禮处硬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拇派。我一直安慰自己荷辕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開白布件豌。 她就那樣靜靜地躺著疮方,像睡著了一般。 火紅的嫁衣襯著肌膚如雪茧彤。 梳的紋絲不亂的頭發(fā)上骡显,一...
    開封第一講書人閱讀 49,785評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音曾掂,去河邊找鬼惫谤。 笑死,一個(gè)胖子當(dāng)著我的面吹牛遭殉,可吹牛的內(nèi)容都是我干的石挂。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼险污,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼痹愚!你這毒婦竟也來了富岳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤拯腮,失蹤者是張志新(化名)和其女友劉穎窖式,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體动壤,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡萝喘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了琼懊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阁簸。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖哼丈,靈堂內(nèi)的尸體忽然破棺而出启妹,到底是詐尸還是另有隱情,我是刑警寧澤醉旦,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布饶米,位于F島的核電站,受9級(jí)特大地震影響车胡,放射性物質(zhì)發(fā)生泄漏檬输。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一匈棘、第九天 我趴在偏房一處隱蔽的房頂上張望丧慈。 院中可真熱鬧,春花似錦主卫、人聲如沸伊滋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至昼浦,卻和暖如春馍资,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背关噪。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工鸟蟹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人使兔。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓建钥,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親虐沥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子熊经,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

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