測試用例使咱們的代碼質量變得可靠,同時讓咱們可以放心地重構或者修改代碼,並保證咱們的修改沒有破壞其餘部分。並且咱們能夠在項目開始的第一天就能運行咱們的代碼,而不用等到萬事俱備。express
XCTest做爲咱們的測試框架是由於它很是簡單而且與 Xcode的IDE直接集成。框架
每一個XCode建立iOS的工程中都有一個叫作」工程名Tests」的分組,這個分組裏就是XCTestCase的子類,XCTest中的測試類都是繼承自XCTestCase。 測試
例如新建一個工程,命名爲Demo,就能看到如圖 spa
#import <UIKit/UIKit.h>#import <XCTest/XCTest.h>@interface DemoTests : XCTestCase@end@implementation DemoTests - (void)setUp { [super setUp]; // Put setup code here. This method is called before the invocation of each test method in the class.} - (void)tearDown { // Put teardown code here. This method is called after the invocation of each test method in the class. [super tearDown]; } - (void)testExample { // This is an example of a functional test case. XCTAssert(YES, @"Pass"); } - (void)testPerformanceExample { // This is an example of a performance test case. [self measureBlock:^{ // Put the code you want to measure the time of here. }]; }@end
四個方法分別是:setUp, tearDown, testExample, testPerformanceExample。點擊testExample按鈕對單個方法作測試,Command+U 或者implemenation按鈕對全部的方法作測試。這個測試用例類沒有頭文件,由於測試用例不須要給外部暴漏接口。按照蘋果官方的文檔,創建一個測試用例的過程應該是這樣的:code
創建一個XCTestCase的子類orm
實現測試方法繼承
選擇性的定義一些實例變量來存儲fixture的狀態接口
經過重寫setUp方法選擇性的實例化fixtureci
經過重寫tearDown方法來在測試後清除文檔
測試方法沒有參數和返回值,用test做爲前綴,好比: - (void)test+name
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語言標量、結構體或聯合體時使用,實際測試發現NSString也能夠); XCTAssertNotEqual(a1, a2, format...)判斷不等(當a1和a2是 C語言標量、結構體或聯合體時使用); XCTAssertEqualWithAccuracy(a1, a2, accuracy, format...)判斷相等,(double或float類型)提供一個偏差範圍,當在偏差範圍(+/-accuracy)之內相等時經過測試; XCTAssertNotEqualWithAccuracy(a1, a2, accuracy, format...) 判斷不等,(double或float類型)提供一個偏差範圍,當在偏差範圍之內不等時經過測試; XCTAssertThrows(expression, format...)異常測試,當expression發生異常時經過;反之不經過;(很變態) XCTAssertThrowsSpecific(expression, specificException, format...) 異常測試,當expression發生specificException異常時經過;反之發生其餘異常或不發生異常均不經過; XCTAssertThrowsSpecificNamed(expression, specificException, exception_name, format...)異常測試,當expression發生具體異常、具體異常名稱的異常時經過測試,反之不經過; XCTAssertNoThrow(expression, format…)異常測試,當expression沒有發生異常時經過測試; XCTAssertNoThrowSpecific(expression, specificException, format...)異常測試,當expression沒有發生具體異常、具體異常名稱的異常時經過測試,反之不經過; XCTAssertNoThrowSpecificNamed(expression, specificException, exception_name, format...)異常測試,當expression沒有發生具體異常、具體異常名稱的異常時經過測試,反之不經過 特別注意下XCTAssertEqualObjects和XCTAssertEqual。 XCTAssertEqualObjects(a1, a2, format...)的判斷條件是[a1 isEqual:a2]是否返回一個YES。 XCTAssertEqual(a1, a2, format...)的判斷條件是a1 == a2是否返回一個YES。 對於後者,若是a1和a2都是基本數據類型變量,那麼只有a1 == a2纔會返回YES