XCTestCase簡單介紹和使用

爲何咱們須要測試?

    測試用例使咱們的代碼質量變得可靠,同時讓咱們可以放心地重構或者修改代碼,並保證咱們的修改沒有破壞其餘部分。並且咱們能夠在項目開始的第一天就能運行咱們的代碼,而不用等到萬事俱備。express

XCTestCase

   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
相關文章
相關標籤/搜索