似此星辰非昨夜
爲誰風露立中宵express
咱們在作組件化的過程當中,確定須要作的一步就是拆組件,把咱們項目中的各個模塊拆分爲基礎組件、功能組件、業務組件,可是在拆分的過程當中很容易就會出現問題,因此咱們在作組件化的過程當中把每一個組件都加上了單元測試,這樣能夠大大提升了咱們組件的健壯性,隨着咱們的組件完成告一段落,今天就把當初探索學習單元測試的經驗分享給你們,每種斷言、每種測試場景都對應的有例子,但願能對你能有幫助編程
(Unit Testing)又稱爲模塊測試, 是針對程序模塊的最小單位來進行正確性檢驗的測試工做。程序單元是應用的最小可測試部件。在過程化編程中,一個單元就是單個程序、函數、過程等;對於面向對象編程,最小單元就是方法,包括基類(超類)、抽象類、或者派生類(子類)中的方法。框架
1.Xcode在XCode4.x時代集成的是OCUnit 2.XCode5.x時代就升級爲了XCTest 3.XCode7增長UI測試
缺點:異步
沒有足夠的時間編寫單元測試,或者說你們都沒有寫單元測試的習慣
XCTest是Xcode自帶的一個測試框架,蘋果官方推薦咱們使用函數
XCTest中的測試類都是繼承自XCTestCase組件化
- (void)setUp:性能
在調用類中的每一個測試方法以前調用此方法。
- (void)tearDown單元測試
這個方法在類中的每一個測試方法調用以後調用
- (void)testPerformanceExample學習
將要度量時間的代碼放在這裏
- (void)testExample測試
使用XCTAssert和相關函數驗證測試結果是否正確
無條件報錯 等價測試 nil測試 布爾測試 異常測試
1.XCTFail.生成一個無條件報錯。
1.XCTAssertEqualObjects
2.XCTAssertNotEqualObjects
3.XCTAssertEqual. 當expression1不等於expression2時報錯,這個測試用於C語言的常量
4.XCTAssertNotEqual
5.XCTAssertEqualWithAccuracy. 當expression1和expression2之間的差異高於accuracy 將報錯。這種測試適用於floats和doubles這些常量,二者之間的細微差別致使它們不徹底相等,可是對全部的常量都有效。
6.XCTAssertNotEqualWithAccuracy
1.XCTAssertNil. 當expression參數非nil時報錯
2.XCTAssertNotNil
1.XCTAssertTrue. 當expression計算結果爲false時報錯。
2.XCTAssertFalse. 當expression計算結果爲true報錯。
3.XCTAssert. 當expression計算結果爲false時報錯,與XCTAssertTrue同義。
1.XCTAssertThrows.當expression不拋出異常時報錯。
2.XCTAssertNoThrow. 當expression拋出異常時報錯。
3.XCTAssertThrowsSpecific.當expression針對指定類不拋出異常時報錯。
4.XCTAssertNoThrowSpecific. 當expression針對指定類拋出異常時報錯。任意其餘異常均可以;也就是說它不會報錯。
5.XCTAssertThrowsSpecificNamed. 當expression針對特定類和特定名字不拋出異常時報錯。對於AppKit框架或Foundation框架很是有用,拋出帶有特定名字的NSException(NSInvalidArgumentException等)。
6.XCTAssertNoThrowSpecificNamed. 當expression針對特定類和特定名字拋出異常時報錯。對於AppKit框架或Foundation框架很是有用,拋出帶有特定名字的NSException(NSInvalidArgumentException等)
找到測試場景
邏輯測試 異步測試 性能測試
準備測試數據
邊界測試數據 正確測試數據 錯誤測試數據
驗證結果
使用斷言驗證
1.合理命名測試用例
1.一個測試方法只測試被測類的一個明確功能, 並命名相應測試方法
須要被測試的方法
相應的測試方法
2.保持測試的獨立性
3.把測試維持在單元級別
4.只測公有接口
1.定義一個XCTestExpectation,表示異步測試想要的結果。
2.設置timeout,表示異步測試最多能夠執行的時間。
3.異步的代碼完成後,調用fullfill來通知異步測試知足條件
1.評估一段代碼的運行時間,XCTest的性能的測試以下格式
Metric:時間做爲性能的指標
Average:表示平均時間
Baseline:表示你設置一個基線
Result:是指平均時間和你是設置的基線進行比較後得出的結果,百分比表示的
max STDDEV :表示標準誤差 10%。
點擊Edit,咱們能夠設置Baseline,ax STDDEV ,來設置以爲滿意的性能測試條件
底部點擊1,2…10能夠看到每次運行的結果。
1.運行測試用例
選中XCode的測試用例導航 1.運行一組測試用例:command+U 2.運行一個單獨的測試用例:
2.新建測試用例
選中test的target,右鍵
3.斷點調試
爲測試用例添加失敗斷點來方便咱們調試:
4.查看測試結果
1. 經過測試導航欄能夠查看到測試結果:
2.經過Report導航欄能夠看到更詳細的測試結果:
點擊測試用例後面的箭頭,能夠跳轉到測試用例的代碼。
1.選擇 Target,而後選擇 Test 模塊,而後勾選 Gather coverage data
2.在 report模塊中就能看到每個 .m文件 的代碼覆蓋狀況
俗話說,一屋不掃,何以掃天下。開發中,咱們本身的代碼都不能保證功能的正確性,那麼還有什麼效率可言呢?作再多的任務,寫再多的代碼也只不過是在搭雞窩,作着機器同樣的重複的工做。IT界有一個原則,DRY原則 —— Don't Repeat Yourself !只有經過對本身的工做不斷的檢查,不斷的測試,才能不斷的突破,不斷的脫穎而出,固然,你才能不斷的提升。