簡介
單元測試(英語:Unit Testing)又稱為模塊測試, 是針對程序模塊的最小單位來進行正確性檢驗的測試工作式曲。
在開發(fā)中我們沒必要為了測試某個小模塊去編譯我們的程序,然后去等待模擬器啟動押框,在進入你需要驗證的模塊去俐银。假如你的項目很大尿背,編譯等老半天,你的電腦沒那么快捶惜,這個步驟下來非常浪費時間田藐。而使用單元測試能節(jié)約我們的時間,提高開發(fā)效率吱七,對于越大的項目效果越明顯汽久。
注意點:
1.單元測試是以代碼測試代碼
2.紅燈/綠燈迭代開發(fā)
3.在日常開發(fā)中,數(shù)據(jù)大部分來自于網(wǎng)絡踊餐,很難出現(xiàn)所以得‘邊界數(shù)據(jù)’景醇!,如果沒有測試所以條件就上架就有可能會造成閃退
4.可以自己創(chuàng)建使用的例子數(shù)據(jù)吝岭,來專門檢查邊界
5.單元測試不是靠NSLog來測試的三痰,NSLog是程序員測試的笨方法,使用‘斷言’來測試的窜管,提前預判條件必須滿足散劫!
提示:
1.不是所有的方法都需要測試
例如:私有方法不需要測試,只有暴露在.h的方法需要測試幕帆!面向對象有一個原則:開閉原則
2.所有跟UI有關的都不需要測試获搏,也不好測試
MVVM,把小的業(yè)務邏輯代碼封裝處理,變成可以測試的代碼蜓肆,讓程序更加健壯
3.一般而言颜凯,代碼的覆蓋度大概在50%~70%
使用
創(chuàng)建工程
對新項目創(chuàng)建
3E17F908-865D-41BB-A57F-3E9671BF1E8C.png
對于老項目創(chuàng)建
在Xcode導航中選擇File-->new-->target-->iOS-->iOS Unit Testing Bundle
3B500F1A-5BB0-4F38-B342-67B70570763E.png
創(chuàng)建測試類
新建一個實體Person類和一個測試類PersonTexts
8247908F-AADE-48CC-8E48-37E9963B5632.png
E904C866-D4D0-452C-ADDA-0A46BA10FEDD.png
D0C26F5C-57CA-46F9-AA49-1ADB1BEC5FE3.png
測試類系統(tǒng)提供方法介紹
457BE767-4B1D-4955-A157-72608197DF60.png
0D70F499-DE3A-4A7B-8D31-1E546CFEA322.png
使用介紹
測試Person模型
58B070D3-0C90-471E-9BCB-6EFDAD484B65.png
28B9C580-F1AD-4AE3-A500-5CF30AA6CC76.png
新建testNewPerson方法谋币,注意單元測試都是以test開頭
3795BE0A-2122-4B64-B217-2D62DF861824.png
點擊箭頭指向的方法運行測試,綠燈代碼通過紅燈代表錯誤不通過症概。
7F9BE3FE-B342-4034-A14E-858ED1AA0BBD.png
ABB630EF-2AE6-40C6-802E-CA3872D35369.png
其它的斷言測試
XCTFail(format…) //生成一個失敗的測試蕾额;
XCTAssertNil(a1, format...) //為空判斷,a1為空時通過彼城,反之不通過诅蝶;
XCTAssertNotNil(a1, format…) //不為空判斷,a1不為空時通過募壕,反之不通過调炬;
XCTAssert(expression, format...) //當expression求值為TRUE時通過;
XCTAssertTrue(expression, format...) //當expression求值為TRUE時通過舱馅;
XCTAssertFalse(expression, format...) //當expression求值為False時通過缰泡;
XCTAssertEqualObjects(a1, a2, format...) //判斷相等,[a1 isEqual:a2]值為TRUE時通過代嗤,其中一個不為空時棘钞,不通過;
XCTAssertNotEqualObjects(a1, a2, format...) //判斷不等干毅,[a1 isEqual:a2]值為False時通過宜猜;
XCTAssertEqual(a1, a2, format...) //判斷相等(當a1和a2是 C語言標量、結構體或聯(lián)合體時使用,實際測試發(fā)現(xiàn)NSString也可以)硝逢;
XCTAssertNotEqual(a1, a2, format...) //判斷不等(當a1和a2是 C語言標量姨拥、結構體或聯(lián)合體時使用);
XCTAssertEqualWithAccuracy(a1, a2, accuracy, format...) //判斷相等渠鸽,(double或float類型)提供一個誤差范圍叫乌,當在誤差范圍(+/-accuracy)以內相等時通過測試;
XCTAssertNotEqualWithAccuracy(a1, a2, accuracy, format...) //判斷不等拱绑,(double或float類型)提供一個誤差范圍综芥,當在誤差范圍以內不等時通過測試;
XCTAssertThrows(expression, format...) //異常測試猎拨,當expression發(fā)生異常時通過;反之不通過屠阻;
XCTAssertThrowsSpecific(expression, specificException, format...) //異常測試红省,當expression發(fā)生specificException異常時通過;反之發(fā)生其他異彻酰或不發(fā)生異常均不通過吧恃;
XCTAssertThrowsSpecificNamed(expression, specificException, exception_name, format...) //異常測試,當expression發(fā)生具體異常麻诀、具體異常名稱的異常時通過測試痕寓,反之不通過傲醉;
XCTAssertNoThrow(expression, format…) //異常測試,當expression沒有發(fā)生異常時通過測試呻率;
XCTAssertNoThrowSpecific(expression, specificException, format...) //異常測試硬毕,當expression沒有發(fā)生具體異常、具體異常名稱的異常時通過測試礼仗,反之不通過吐咳;
XCTAssertNoThrowSpecificNamed(expression, specificException, exception_name, format...) //異常測試,當expression沒有發(fā)生具體異常元践、具體異常名稱的異常時通過測試韭脊,反之不通過。