国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

初探iOS單元測試XCTest

2019-11-09 18:51:23
字體:
來源:轉載
供稿:網友

測試基本流程

添加單元測試

創建項目時勾選Inclue Unit Tests .忘了勾選可通過創建File–>new–>target–>iOS–>iOS Unit Testing Bundle。

默認單元測試文件

繼承XCTestCase,默認的方法有4個: 1. setUp(每個測試方法調用前執行, 在執行完父類方法后添加自定義配置); 2. tearDown(每個測試方法調用后執行,在執行父類方法前添加自定義配置); 3. textExample(一個示例); 4. testPerformanceExample(在measureBlock中放入需要測試性能的代碼)方法。

添加測試用例

測試用例命名必須以test開頭,不可有參數且返回為void,不然無法識別為測試方法。測試用例類型有3種:普通測試,性能測試與異步測試。在后文中有詳細介紹

運行單元測試

運行單元測試快捷鍵: CMD + U測試整個文件的測試用例也可通過每個單元測試用例左邊的按鈕執行單元測試,執行后綠色勾選按鈕代表測試成功,紅色叉號按鈕代表測試失敗。

測試用例類型

普通測試

如果代碼未返回預測結果,則通過斷言API打印錯誤。

// 1. 普通測試- (void)testExample { // This is an example of a functional test case. // Use XCTAssert and related functions to verify your tests PRoduce the correct results. NSLog(@"testExample"); int a = 0; XCTAssertTrue(a == 0, "斷言a等于0,不等于則測試沒通過");}

常用斷言如下所示(以下斷言含義from ios UnitTest 學習筆記):

// 常用斷言XCTAssert(expression, format...)當expression求值為TRUE時通過;XCTAssertTrue(expression, format...)當expression求值為TRUE時通過;XCTAssertFalse(expression, format...)當expression求值為False時通過;XCTAssertNil(a1, format...)為空判斷,a1為空時通過,反之不通過;XCTAssertNotNil(a1, format…)不為空判斷,a1不為空時通過,反之不通過;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發生異常時通過;反之不通過;(很變態)XCTAssertThrowsSpecificNamed(expression, specificException, exception_name, format...)異常測試,當expression發生具體異常、具體異常名稱的異常時通過測試,反之不通過;XCTAssertNoThrow(expression, format…)異常測試,當expression沒有發生異常時通過測試;XCTAssertNoThrowSpecific(expression, specificException, format...)異常測試,當expression沒有發生具體異常、具體異常名稱的異常時通過測試,反之不通過;XCTAssertNoThrowSpecificNamed(expression, specificException, exception_name, format...)異常測試,當expression沒有發生具體異常、具體異常名稱的異常時通過測試,反之不通過// 非常用斷言XCTFail(format…) 生成一個失敗的測試;XCTAssertThrowsSpecific(expression, specificException, format...) 異常測試,當expression發生specificException異常時通過;反之發生其他異常或不發生異常均不通過;

ps: ?1. XCTAssert與XCTAssertTrue有什么區別

?2. XCTAssertEqualObjects和XCTAssertEqual有什么區別 [reply]XCTAssertEqualObjects(a1, a2, format…)的判斷條件是[a1 isEqual:a2]是否返回一個YES。XCTAssertEqual(a1, a2, format…)的判斷條件是a1 == a2是否返回一個YES,如果a1和a2都是基本數據類型變量,那么只有a1 == a2才會返回YES;如果a1和a2都是指針,那么只有a1和a2指向同一個對象才會返回YES。

性能測試

// 2. 性能測試- (void)testPerformanceExample { // This is an example of a performance test case. [self measureBlock:^{// 運行測試后,該行會顯示執行時間,block內放入需測試性能的代碼塊 // Put the code you want to measure the time of here. for (int i = 0; i < 100; i++) { NSLog(@"dd"); } }];}

異步測試

定義一個或多個XCTestException(通過調用XCTestCase的expectationWithDescription:方法獲取XCTestExpection), 異步代碼執行完成調用XCTestException實例的fullfill方法通知異步測試滿足條件。然后再通過調用類中的waitForExceptionsWithTimeout:handler方法設置異步測試超時時間,并通過handler設置超時行為。

// 3.異步測試- (void)testRequest { XCTestExpectation *requestExpectation = [self expectationWithDescription:@"send request"]; AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager]; [mgr GET:@"https://baidu.com" parameters:nil success:^(AFHTTPRequestOperation *operation, id responSEObject) { NSLog(@"responseObject:%@", responseObject); XCTAssertNotNil(responseObject, @"返回錯誤"); [requestExpectation fulfill]; } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"error:%@", error); XCTAssertNil(error, @"請求出錯"); [requestExpectation fulfill]; }]; [self waitForExpectationsWithTimeout:3.0 handler:^(NSError * _Nullable error) { if (error) { NSLog(@"Timeout Error:%@", error.description); } }];}

單元測試的意義

Luis Solano在Objc.io的一篇文章中《Bad Testing Practices 》總結了自動化測試的五個好處: 1. 使重構更為簡單; 2. 避免代碼惡化; 3. 提供可執行的說明和文檔; 4. 減少創建軟件的時間; 5. 減少創建軟件的代價。 總的來說也可以通過Objc.io的另一篇文章《Real-World Testing with XCTest》中的一句話簡述: 測試使我們的代碼質量變的可靠,同時讓我們重構或修改代碼而不用擔心修改是否破壞了其他部分。

參考資料

[官方文檔–Writing Test Classes and Methods] iOS 單元測試之XCTest詳解(一) ios UnitTest 學習筆記


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 楚雄市| 黑山县| 大方县| 棋牌| 浦江县| 兖州市| 奉贤区| 镇坪县| 荔波县| 平顺县| 遂平县| 志丹县| 翼城县| 突泉县| 和顺县| 鞍山市| 灵丘县| 沁水县| 迁西县| 宝兴县| 和平县| 汝阳县| 凉山| 县级市| 分宜县| 芜湖市| 衡阳县| 靖远县| 怀远县| 沧州市| 霍邱县| 孟津县| 得荣县| 华宁县| 喀什市| 扶风县| 荔波县| 扬州市| 甘谷县| 商洛市| 东乌|