iOS單元測試

一、使用系統集成XCTest進行性能測試

1、爲何要進行單元測試:http://my.oschina.net/w11h22j33/blog/205152, http://blog.csdn.net/qinlicang/article/details/42519787

2、單元測試的使用:(command  +  U

     1)主要的三個方法:

1. - (void)setUp:每個test方法執行前調用

   2. - (void)tearDown:每個test方法執行後調用

     3. - (void)testXXX:命名爲XXX的測試方法

    2)基本功能測試(1、準備測試數據;2、調用調用目標API;3、驗證輸出和行爲)

#pragma mark -基本功能測試(驗證手機號正則表達式的正確與否)

- (void)testExample {

       BOOL telNumber = [UtilscheckTelNumber:@"13120998375"];

    XCTAssertTrue(telNumber, @"手機正則表達式不正確");

}

    3)性能測試(主要評估一段代碼的運行時間)

#pragma mark -性能測試(測試錄音格式轉換和存儲所消耗的時間)

- (void)testPerformanceExample {

    NSData *cafData = [NSDatadataWithContentsOfFile:[NSHomeDirectory()stringByAppendingPathComponent:@"Documents/recording.caf"]];

    NSString *filePath2 = [NSStringstringWithFormat:@"%@/%@.amr",NSHomeDirectory(), [NSStringstringWithFormat:@"%@/%@",@"Documents/",@"tt"]];

    [selfmeasureBlock:^{

       NSData *amrData =EncodeWAVEToAMR(cafData,1,16);

        [amrDatawriteToFile:filePath2atomically:YES];

    }];

}

4)異步測試

#pragma mark -異步測試 (通過網絡請求做異步測試)

- (void)testGetWithUrl{

   NSURL *url = [NSURLURLWithString:@"http://www.baidu.com"];

   XCTestExpectation *expectation = [selfexpectationWithDescription:@"GET \(URL)"];

   NSURLSession *session = [NSURLSessionsharedSession];

    id task = [session dataTaskWithURL:url completionHandler:^(NSData *_Nullable data,NSURLResponse *_Nullable response, NSError *_Nullable error) {

        XCTAssertNotNil(data, "返回數據不應該爲空");

       XCTAssertNil(error,"error應該爲nil");

       [expectationfulfill];

   }];

    [task resume];

   [selfwaitForExpectationsWithTimeout:20.0handler:^(NSError *_Nullable error) {

        if(error){

           NSLog(@"請求超時");

             [task cancel];

        }

    }];

}

補充:1、如何測試單例中的方法:http://www.cocoachina.com/ios/20150507/11766.html

2、使用RAC開發的相關測試:http://www.csdn.net/article/2015-09-06/2825624

結語:如果XCTest無法滿足測試需要,可以試着使用OCMock 和GHUnit進行單元測試

-------------------------------------------插入斷言--------------------------------------------------------------------------------

斷言:

======

- 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...)//判斷相等(當a1a2 C語言標量、結構體或聯合體時使用,實際測試發現NSString也可以);

    

- XCTAssertNotEqual(a1, a2, format...)//判斷不等(當a1a2 C語言標量、結構體或聯合體時使用);

    

- XCTAssertEqualWithAccuracy(a1, a2, accuracy, format...)//判斷相等,(doublefloat類型)提供一個誤差範圍,當在誤差範圍(+/-accuracy)以內相等時通過測試;

    

- XCTAssertNotEqualWithAccuracy(a1, a2, accuracy, format...)//判斷不等,(doublefloat類型)提供一個誤差範圍,當在誤差範圍以內不等時通過測試;

    

- 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沒有發生具體異常、具體異常名稱的異常時通過測試,反之不通過

參考資料連接:

======

> Xcode5單元測試(一)使用XCTest進行單元測試:http://www.it165.net/pro/html/201403/10828.html

> Testing with Xcode文檔(中文版):編寫測試類與方法:http://www.cocoachina.com/ios/20140715/9144.html

> 官方文檔:https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/testing_with_xcode/testing_3_writing_test_classes/testing_3_writing_test_classes.html#//apple_ref/doc/uid/TP40014132-CH4-SW34


二、UI Test 

1、添加iOS UI Testing Bundle .添加以後纔可以進行UI Test 操作

2、

[app.tabBars.buttons[@"患者"]pressForDuration:3.0];  與  [app.tabBars.buttons[@"患者"] tap]; 的區別:

第一個是點擊tabbar以後,在下一個頁面停留3秒; 第二個方法是點擊按鈕,然後一個頁面運行時間

3、屏幕錄製的過程出現部分按鈕不識別的Bug,暫時無法解決,請繞過這個測試。

補充:

1、瞭解API: http://blog.csdn.net/itfootball/article/details/46624331

2、操作規範:http://www.cocoachina.com/ios/20150821/13154.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章