UI Tests是一個自動測試UI與互動的Testing元件
UI Tests有什麼用?
它可以通過編寫代碼、或者是記錄開發者的操作過程并代碼化,來實作自動點選某個按鈕、視圖,或者自動輸入文字等功能。
UI Tests的重要性
在實際的開發過程中,随着項目越做越大,功能越來越多,僅僅靠人工操作的方式來覆寫所有測試用例是非常困難的,尤其是加入新功能以後,舊的功能也要重新測試一遍,這導緻了測試需要花非常多的時間來進行回歸測試,這裡産生了大量重複的工作,而這些重複的工作有些是可以自動完成的,這時候UI Tests就可以幫助解決這個問題了。
XCTestCase簡介
XCTest是Apple官方提供一個測試工具,一個内置的測試架構,從工程裡面可以看到,一個“應用名稱”的group,我們直接可以使用commond+R 來遠行,一個測試的target我們可以使用commond+U來遠行測試target,在測試target的目錄下會有一個預設的“應用名稱”+Test的類,這個類隻有.m沒有.h,繼承于XCTestCase,使用commond+U即可運作。
使用方法
如果項目建立的時勾選了UnitTest,如圖
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICO2MjMzMTN0EjNycDM2EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
如果是已有的項目,可以通過添加target的方式添加一個UI Tests,點選xcode的菜單,找到target欄
在Test選項中選擇Cocoa Touch UI Testing Bundle
建立測試代碼
手動建立測試代碼
打開測試檔案,在testExample()方法中添加測試代碼,預設測試類裡面有以下方法:
//方法在XCTestCase的測試方法調用之前調用,可以在測試之前建立在test case方法中需要用到的一些對象等
- (void)setUp ;
//當測試全部結束之後調用tearDown方法,法則在全部的test case執行結束之後清理測試現場,釋放資源删除不用的對象等
- (void)tearDown ;
//測試代碼執行性能
- (void)testPerformanceExample
XCTestCase使用
XCTestCase的初始化不是使用者控制的,針對一個功能塊的單元測試(針對某個class),隻需要單獨給為這個類建立一個繼承于XCTestCase,在這個檔案内實作上述基本函數以後(一半系統會預設建立這三個函數),其實的邏輯隻需要開發者自行定義以“test”開頭的函數,然後在内部實作自己針對某個函數、傳回數值結果、操作等的測試腳本即可,commond+U執行的時間,單元測試會自動執行這些test打頭的函數,當函數頭上出現藍色的标記則表明測試通過,否則直接報紅色錯誤。
XCTest常用工具:
//斷言,最基本的測試,如果expression為true則通過,否則列印後面格式化字元串
XCTAssert(expression, format...)
//Bool測試:
XCTAssertTrue(expression, format...)
XCTAssertFalse(expression, format...)
//相等測試
XCTAssertEqual(expression1, expression2, format...)
XCTAssertNotEqual(expression1, expression2, format...)
XCTAssertEqualObjects(expression1, expression2, format...)
XCTAssertNotEqualObjects(expression1, expression2, format...)
XCTAssertGreaterThan(expression1, expression2, format...)
XCTAssertGreaterThanOrEqual(expression1, expression2, format...)
XCTAssertLessThan(expression1, expression2, format...)
XCTAssertLessThanOrEqual(expression1, expression2, format...)
//double float 對比資料測試使用
XCTAssertEqualWithAccuracy(expression1, expression2, accuracy, format...)//expression1和expression2之間差别大于accuracy時輸出format語句
XCTAssertNotEqualWithAccuracy(expression1, expression2, accuracy, format...)//expression1和expression2之間差别小于或者等于accuracy時輸出format語句
//Nil測試,XCTAssert[Not]Nil斷言判斷給定的表達式值是否為nil
XCTAssertNil(expression, format...)
XCTAssertNotNil(expression, format...)
//失敗斷言
XCTFail(format...)
//Exception Tests
XCTAssertThrows(expression, format...)
XCTAssertThrowsSpecific(expression, exception_class, format...)
XCTAssertThrowsSpecificNamed(expression, exception_class, exception_name, format...)
XCTAssertNoThrow(expression, format...)
XCTAssertNoThrowSpecific(expression, exception_class, format...)
XCTAssertNoThrowSpecificNamed(expression, exception_class, exception_name, format...)