天天看點

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,如圖

IOS:UITest單元測試

如果是已有的項目,可以通過添加target的方式添加一個UI Tests,點選xcode的菜單,找到target欄

IOS:UITest單元測試

在Test選項中選擇Cocoa Touch UI Testing Bundle

IOS:UITest單元測試

建立測試代碼

手動建立測試代碼

打開測試檔案,在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...)