一、使用系統集成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...)//判斷相等(當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沒有發生具體異常、具體異常名稱的異常時通過測試,反之不通過
參考資料連接:
======
> 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