IOS:UITest單元測試
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,如圖
如果是已有的專案,可以通過新增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...)