一:在iOS中單元測(cè)試主要使用場(chǎng)景
1还棱、是寫完代碼以后:想要驗(yàn)證一下自己寫的代碼是否有問題撤摸。
2温眉、寫代碼之前:就是寫代碼之前所有的功能分模塊的設(shè)計(jì)好育叁,測(cè)試通過了再寫。(我反正是沒用過)芍殖。
3、修復(fù)某個(gè)bug后:一般修復(fù)完某個(gè)bug谴蔑,為了確保修復(fù)是成功的豌骏,會(huì)寫測(cè)試龟梦。
二:創(chuàng)建具有單元功能的工程
1、如果是新建工程窃躲,直接勾選include Unit Tests就可以了计贰,目前新建項(xiàng)目這個(gè)都是默認(rèn)勾選的。
2蒂窒、如果已有的工程不包含測(cè)試用例可以通過
File-->new-->target-->iOS-->iOS Unit Testing Bundle
來添加UnitTest躁倒。三:XCTestCase了解
1、方法作用
- (void)setUp {
[super setUp];
// Put setup code here. This method is called before the invocation of each test method in the class.
//初始化的代碼洒琢,在測(cè)試方法調(diào)用之前調(diào)用
}
- (void)tearDown {
// Put teardown code here. This method is called after the invocation of each test method in the class.
// 釋放測(cè)試用例的資源代碼秧秉,這個(gè)方法會(huì)每個(gè)測(cè)試用例執(zhí)行后調(diào)用
[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.
// 測(cè)試用例的例子,注意測(cè)試用例一定要test開頭
}
- (void)testPerformanceExample {
// This is an example of a performance test case.
// 測(cè)試性能例子
[self measureBlock:^{
// Put the code you want to measure the time of here.
// 需要測(cè)試性能的代碼
}];
}
2衰抑、XCTest常用的斷言及解釋象迎。
XCTFail(format…) 生成一個(gè)失敗的測(cè)試;
XCTAssertNil(a1, format...)為空判斷呛踊,a1為空時(shí)通過砾淌,反之不通過;
XCTAssertNotNil(a1, format…)不為空判斷谭网,a1不為空時(shí)通過汪厨,反之不通過;
XCTAssert(expression, format...)當(dāng)expression求值為TRUE時(shí)通過愉择;
XCTAssertTrue(expression, format...)當(dāng)expression求值為TRUE時(shí)通過劫乱;
XCTAssertFalse(expression, format...)當(dāng)expression求值為False時(shí)通過;
XCTAssertEqualObjects(a1, a2, format...)判斷相等薄辅,[a1 isEqual:a2]值為TRUE時(shí)通過要拂,其中一個(gè)不為空時(shí),不通過站楚;
XCTAssertNotEqualObjects(a1, a2, format...)判斷不等脱惰,[a1 isEqual:a2]值為False時(shí)通過;
XCTAssertEqual(a1, a2, format...)判斷相等(當(dāng)a1和a2是 C語(yǔ)言標(biāo)量窿春、結(jié)構(gòu)體或聯(lián)合體時(shí)使用, 判斷的是變量的地址拉一,如果地址相同則返回TRUE,否則返回NO)旧乞;
XCTAssertNotEqual(a1, a2, format...)判斷不等(當(dāng)a1和a2是 C語(yǔ)言標(biāo)量抛虏、結(jié)構(gòu)體或聯(lián)合體時(shí)使用)材蛛;
XCTAssertEqualWithAccuracy(a1, a2, accuracy, format...)判斷相等,(double或float類型)提供一個(gè)誤差范圍,當(dāng)在誤差范圍(+/-accuracy)以內(nèi)相等時(shí)通過測(cè)試携兵;
XCTAssertNotEqualWithAccuracy(a1, a2, accuracy, format...) 判斷不等榛泛,(double或float類型)提供一個(gè)誤差范圍,當(dāng)在誤差范圍以內(nèi)不等時(shí)通過測(cè)試;
XCTAssertThrows(expression, format...)異常測(cè)試叉橱,當(dāng)expression發(fā)生異常時(shí)通過;反之不通過者蠕;(很變態(tài)) XCTAssertThrowsSpecific(expression, specificException, format...) 異常測(cè)試窃祝,當(dāng)expression發(fā)生specificException異常時(shí)通過;反之發(fā)生其他異初饴拢或不發(fā)生異常均不通過粪小;
XCTAssertThrowsSpecificNamed(expression, specificException, exception_name, format...)異常測(cè)試,當(dāng)expression發(fā)生具體異常抡句、具體異常名稱的異常時(shí)通過測(cè)試探膊,反之不通過;
XCTAssertNoThrow(expression, format…)異常測(cè)試玉转,當(dāng)expression沒有發(fā)生異常時(shí)通過測(cè)試突想;
XCTAssertNoThrowSpecific(expression, specificException, format...)異常測(cè)試,當(dāng)expression沒有發(fā)生具體異常究抓、具體異常名稱的異常時(shí)通過測(cè)試猾担,反之不通過;
XCTAssertNoThrowSpecificNamed(expression, specificException, exception_name, format...)異常測(cè)試刺下,當(dāng)expression沒有發(fā)生具體異常绑嘹、具體異常名稱的異常時(shí)通過測(cè)試,反之不通過
四:簡(jiǎn)單使用
1.功能邏輯的測(cè)試
- 在ViewController中寫一個(gè)簡(jiǎn)單的方法
- (int)testInt;//聲明
- (int)testInt;//實(shí)現(xiàn)
{
return 100;
}
-
在測(cè)試的文件中導(dǎo)入ViewController.h橘茉,并且定義一個(gè)vc屬性,然后就可以實(shí)現(xiàn)測(cè)試了
command+u快捷方式運(yùn)行工腋,或者produce-->test都行,工程就跑起來了我們可以在在控制臺(tái)清晰的看到我們要測(cè)試的用例子通過了畅卓,測(cè)試通過的測(cè)試方法會(huì)有綠色的鉤擅腰。
這時(shí)候我們改下斷言,把100隨便改成一個(gè)數(shù)翁潘,120.再comand+u運(yùn)行下趁冈,看下什么情況
提示測(cè)試不通過了,因?yàn)槲覀円獪y(cè)試的方法返回值是90拜马,
2渗勘、代碼性能測(cè)試
比如我們要測(cè)試
NSData *data = UIImagePNGRepresentation([UIImage imageNamed:@"cs"]);
NSData *data = UIImageJPEGRepresentation([UIImage imageNamed:@"cs"],
這二段代碼執(zhí)行的時(shí)間,我們可以在testPerformanceExample
方法里測(cè)試俩莽。