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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容