1. 程式人生 > >IOS:UITest單元測試

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...)