IOS-使用XCODE內建的單元測試UnitTest

來源:互聯網
上載者:User

IOS-使用XCODE內建的單元測試UnitTest

什麼是單元測試?
一聽到單元測試這個詞感覺很高端,其實單元測試就是為你的方法多專門寫一個測試函數。以保證你的方法在不停的修改開發中。保持正確。如果出錯,第一時間讓你知道,這樣從最小單位開始監控來保證軟體的品質。

什麼時候用到單元測試:

1、寫完代碼以後:想要驗證一下自己寫的代碼是否有問題。
2、寫代碼之前:就是寫代碼之前所有的功能分模組的設計好,測試通過了再寫。(我反正是沒用過)。
3、修複某個bug後:一般修複完某個bug,為了確保修複是成功的,會寫測試。

怎麼寫單元測試

好像廢話有點多了,還是直接奔主題吧。
建立一個工程,名字隨便取,直接勾選include Unit Tests

萬一我忘了勾選怎麼辦呢?可以有其他方式建立File-->new-->target-->iOS-->iOS Unit Testing Bundle。名字自己看著辦吧。

工程建立好後,那要怎麼開始測試呢?
找到系統單元測試Testes檔案夾中.m檔案看中會到看到幾個方法,我們來看下這個幾個方法是什麼時候調用和他們各種的作用

  - (void)setUp {[super setUp];// Put setup code here. This method is called before the invocation of each test method in the class.//初始化的代碼,在測試方法調用之前調用}- (void)tearDown {// Put teardown code here. This method is called after the invocation of each test method in the class.// 釋放測試案例的資原始碼,這個方法會每個測試案例執行後調用[super tearDown];}- (void)testExample {// This is an example of a functional test case.// Use XCTAssert and related functions to verify your tests produce the correct results.// 測試案例的例子,注意測試案例一定要test開頭}- (void)testPerformanceExample {// This is an example of a performance test case.// 測試效能例子[self measureBlock:^{    // Put the code you want to measure the time of here.// 需要測試效能的代碼}];}

在ViewController中寫一個簡單的方法

- (int)getNum;

實現:

- (int)getNum {return 100;}

在測試的檔案中匯入ViewController.h,並且定義一個vc屬性

 #import #import "ViewController.h"@interface ____Tests : XCTestCase@property (nonatomic,strong) ViewController *vc;@end@implementation ____Tests

測試案例的實現

- (void)setUp {[super setUp];// 執行個體化需要測試的類self.vc = [[ViewController alloc] init];}- (void)tearDown {// 清空self.vc = nil;[super tearDown];}- (void)testMyFuc {// 調用需要測試的方法,int result = [self.vc getNum];// 如果不相等則會提示@“測試不通過”XCTAssertEqual(result, 100,@"測試不通過");}

command+u捷徑運行,或者produce-->test都行,
工程就跑起來了


我們可以在在控制台清晰的看到我們要測試的用例子通過了,測試通過的測試方法會有綠色的鉤。

這時候我們改下斷言,把100隨便改成一個數,120.再comand+u運行下,看下什麼情況

很明顯是能不能通過的,因為我們要測試的方法傳回值是100,

內建的測試架構還能測試某個方法的效能,

- (void)testPerformanceExample {// This is an example of a performance test case.[self measureBlock:^{    // Put the code you want to measure the time of here.    for (int i = 0; i<100; i++) {        NSLog(@"dd");    }}];

}

我們在例子中添加一個for迴圈,測試其效能。command+u運行就能看到


QQ20160129-5.png

能夠非常直觀的看出其調用的時間,可以用其來對比效能的優劣。

另外XCTest還支援非同步單元測試,我就不在這裡展開了。最後附上常用的斷言及解釋。

  XCTFail(format…) 產生一個失敗的測試; XCTAssertNil(a1, format...)為空白判斷,a1為空白時通過,反之不通過;XCTAssertNotNil(a1, format…)不為空白判斷,a1不為空白時通過,反之不通過;XCTAssert(expression, format...)當expression求值為TRUE時通過;XCTAssertTrue(expression, format...)當expression求值為TRUE時通過;XCTAssertFalse(expression, format...)當expression求值為False時通過;XCTAssertEqualObjects(a1, a2, format...)判斷相等,[a1 isEqual:a2]值為TRUE時通過,其中一個不為空白時,不通過;XCTAssertNotEqualObjects(a1, a2, format...)判斷不等,[a1 isEqual:a2]值為False時通過;XCTAssertEqual(a1, a2, format...)判斷相等(當a1和a2是 C語言標量、結構體或聯合體時使用, 判斷的是變數的地址,如果地址相同則返回TRUE,否則返回NO);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發生異常時通過;反之不通過;(很變態) XCTAssertThrowsSpecific(expression, specificException, format...) 異常測試,當expression發生specificException異常時通過;反之發生其他異常或不發生異常均不通過;XCTAssertThrowsSpecificNamed(expression, specificException, exception_name, format...)異常測試,當expression發生具體異常、具體異常名稱的異常時通過測試,反之不通過;XCTAssertNoThrow(expression, format…)異常測試,當expression沒有發生異常時通過測試;XCTAssertNoThrowSpecific(expression, specificException, format...)異常測試,當expression沒有發生具體異常、具體異常名稱的異常時通過測試,反之不通過;XCTAssertNoThrowSpecificNamed(expression, specificException, exception_name, format...)異常測試,當expression沒有發生具體異常、具體異常名稱的異常時通過測試,反之不通過

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.