開發和測試向來就是一對冤家,再加上產品再添一把火,不吵才是奇跡呢。所以一般我們開發的時候儘可能的減少一些小的失誤,比如說獲取的數值為空,判定條件不充分、當然還有面對測試人員測試時將軟體暴力測試,出現一些網路解析數據的延遲有時也是無法避免的。可是這些確實是一些困擾。但是為了提高開發的效率,犯這些小錯誤 ...
開發和測試向來就是一對冤家,再加上產品再添一把火,不吵才是奇跡呢。所以一般我們開發的時候儘可能的減少一些小的失誤,比如說獲取的數值為空,判定條件不充分、當然還有面對測試人員測試時將軟體暴力測試,出現一些網路解析數據的延遲有時也是無法避免的。可是這些確實是一些困擾。但是為了提高開發的效率,犯這些小錯誤也是在所難免。綜合對比了一下,覺得還是效率的提高還是離不開自己程式的健壯性,提到健壯性那就得保證程式中的模塊沒有問題,那當然離不開單元測試的幫助了。
單元測試是對程式中的小函數,類、或者是路徑等等的直接檢測,雖然不是必須,卻在提高編程效率上有著很關鍵的作用。針對OC編程,一種面向對象的編程方式。通常測試的就是某個關鍵的方法(函數),或者是某個值的判定之類的。能進行單元測試的工程,耦合度上也不會很高,這樣也對我們的代碼的做了簡化,減少了程式之間的耦合度,有助於開發高質量的代碼,實現敏捷開發。
在Xcode中有其自帶的OCUnit測試框架,在我們創建工程的時候即可以選擇,選擇完,工程中就會多出兩個以Tests結尾的文件,文件是該類繼承自XCTestCase類,其中包含三個方法:setUp,tearDown和testExample。
setUp方法是每個測試方法調用前執行,用於在測試前設置好要測試的方法,tearDown是每個測試方法調用後執行是在測試後將設置好的要測試的方法寫在裡面。testExample顧名思義就是一個示例和我們的自己創建的測試方法一樣。不過測試方法必須testXXX的格式,且不能有參數,,不能有返回值,不然不會識別為測試方法。測試方法的執行順序是字典序排序。按快捷鍵Command + U進行單元測試,這個快捷鍵是全部測試,點擊之後所有的測試用例就會順序執行。雖然測試用例在每一個工程中都會有不盡相同的寫法,但是涉及到的斷言卻是一樣的。針對測試類中的18的斷言做了以下摘錄,以備查用。
XCTFail(...)
任何嘗試都會測試失敗,...是輸出的提示文字。(後面都是這樣)
XCTAssertNil(expression, ...)
expression為空時通過,否則測試失敗。
expression接受id類型的參數。
XCTAssertNotNil(expression, ...)
expression不為空時通過,否則測試失敗。
expression接受id類型的參數。
XCTAssert(expression, ...)
expression為true時通過,否則測試失敗。
expression接受boolean類型的參數。
XCTAssertTrue(expression, ...)
expression為true時通過,否則測試失敗。
expression接受boolean類型的參數。
XCTAssertFalse(expression, ...)
expression為false時通過,否則測試失敗。
expression接受boolean類型的參數。
XCTAssertEqualObjects(expression1, expression2, ...)
expression1和expression1地址相同時通過,否則測試失敗。
expression接受id類型的參數。
XCTAssertNotEqualObjects(expression1, expression2, ...)
expression1和expression1地址不相同時通過,否則測試失敗。
expression接受id類型的參數。
XCTAssertEqual(expression1, expression2, ...)
expression1和expression1相等時通過,否則測試失敗。
expression接受基本類型的參數(數值、結構體之類的)。
XCTAssertNotEqual(expression1, expression2, ...)
expression1和expression1不相等時通過,否則測試失敗。
expression接受基本類型的參數。
XCTAssertEqualWithAccuracy(expression1, expression2, accuracy, ...)
expression1和expression2之間的任何值都大於accuracy時,測試失敗。
expression1、expression2、accuracy都為基本類型。
XCTAssertNotEqualWithAccuracy(expression1, expression2, accuracy, ...)
expression1和expression2之間的任何值都小於等於accuracy時,測試失敗。
expression1、expression2、accuracy都為基本類型。
XCTAssertGreaterThan(expression1, expression2, ...)
expression1 <= expression2時,測試失敗。
expression為基本類型
XCTAssertGreaterThanOrEqual(expression1, expression2, ...)
expression1 < expression2時,測試失敗。
expression為基本類型
XCTAssertLessThan(expression1, expression2, ...)
expression1 >= expression2時,測試失敗。
expression為基本類型
XCTAssertLessThanOrEqual(expression1, expression2, ...)
expression1 > expression2時,測試失敗。
expression為基本類型
XCTAssertThrows(expression, ...)
expression沒拋異常,測試失敗。
expression為一個表達式
XCTAssertThrowsSpecific(expression, exception_class, ...)
expression沒拋指定類的異常,測試失敗。
expression為一個表達式
exception_class為一個指定類
XCTAssertThrowsSpecificNamed(expression, exception_class, exception_name, ...)
expression沒拋指定類、指定名字的異常,測試失敗。
expression為一個表達式
exception_class為一個指定類
exception_name為一個指定名字
XCTAssertNoThrow(expression, ...)
expression拋出異常時,測試失敗。
expression為一個表達式
XCTAssertNoThrowSpecific(expression, exception_class, ...)
expression拋出指定類的異常,測試失敗。
expression為一個表達式
XCTAssertNoThrowSpecificNamed(expression, exception_class, exception_name, ...)
expression拋出指定類、指定名字的異常,測試失敗。
expression為一個表達式
exception_class為一個指定類
exception_name為一個指定名字
最後附文檔一篇,以備修正
https://developer.apple.com/legacy/library/documentation/DeveloperTools/Conceptual/UnitTesting/AB-Unit-Test_Result_Macro_Reference/result_macro_reference.html