前言
前文說過,所謂單元測(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步:
-
創(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应役。
-
創(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
蕉陋。
創(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")
}執(zhí)行測(cè)試
執(zhí)行測(cè)試可以通過菜單欄的 Product -> Test (或快捷鍵 cmd + u) 勺爱,點(diǎn)擊測(cè)試導(dǎo)航器中測(cè)試方法的三角或點(diǎn)擊測(cè)試方法左側(cè)邊欄的空心方塊來執(zhí)行查看執(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é)果奈泪。