iOS單元測(cè)試使用

關(guān)于iOS單元測(cè)試

單元測(cè)試是針對(duì)程序模塊來進(jìn)行正確性檢驗(yàn)的測(cè)試工作博秫。程序單元是應(yīng)用的最小可測(cè)試部件仔蝌。進(jìn)行單元測(cè)試漩符,目的就是為了證明這段代碼的行為和我們期望的一致,比如測(cè)試一些功能是否正常酝豪,接口是否正常涛碑。

iOS集成了自己的測(cè)試框架Unit TestsUI Tests。在新建一個(gè)工程的時(shí)候孵淘,可以直接選擇包含單元測(cè)試框架:

單元測(cè)試

也可以在Xcode上方菜單欄選擇 File->New->Target蒲障,打開之后選擇iOS->iOS Unit Testing Bundle。

工程建好之后瘫证,我們可以看到一個(gè)工程名+Tests的文件夾揉阎,打開里面的.m文件,我們可以看到有幾個(gè)方法:

- (void)setUp {
    [super setUp];
    // Put setup code here. This method is called before the invocation of each test method in the class.
    // 這個(gè)方法在測(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è)試代碼執(zhí)行時(shí)間
    }];
}

上面代碼中的- (void)testExample方法只是一個(gè)測(cè)試用例的例子,我們還可以自己定義測(cè)試用例方法毡庆,但是必須以test來開頭坑赡,一般test后面跟上要測(cè)試的方法名。

如何進(jìn)行測(cè)試

我們可以先在ViewController.h中隨便定義一個(gè)方法么抗,返回一個(gè)int值:

- (int)number;

然后在ViewController.m中實(shí)現(xiàn):

- (int)number{
    return 10;
}

接下來我們開始對(duì)這個(gè)方法進(jìn)行簡(jiǎn)單的測(cè)試垮衷,我們?cè)跍y(cè)試文件中導(dǎo)入ViewController.h,然后創(chuàng)建一個(gè)屬性:

@property (nonatomic, strong) ViewController *vc;

在測(cè)試類的- (void)setUp中對(duì)vc進(jìn)行初始化:_vc = [[ViewController alloc] init];乖坠。在tearDown方法中將測(cè)試用例的資源釋放:self.vc = nil;注意釋放要在[super tearDown]之前執(zhí)行搀突。

然后寫測(cè)試用例:

- (void)testExample {
    int result = [self.vc number];
    // 測(cè)試返回的結(jié)果是否等于10
    XCTAssertEqual(result, 10,@"hahaha"); 
}

最后Command+u執(zhí)行測(cè)試。也可以把測(cè)試的結(jié)果改一下運(yùn)行看測(cè)試不通過會(huì)有什么效果熊泵。

XCTest一些常用的斷言(暫時(shí)寫這么多仰迁,其他自己查):

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語言標(biāo)量、結(jié)構(gòu)體或聯(lián)合體時(shí)使用, 判斷的是變量的地址貌亭,如果地址相同則返回TRUE柬唯,否則返回NO);
XCTAssertNotEqual(a1, a2, format...)判斷不等(當(dāng)a1和a2是 C語言標(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è)試堪滨;

完整測(cè)試代碼:

#import <XCTest/XCTest.h>
#import "ViewController.h"

@interface XCTestZcTests : XCTestCase
@property (nonatomic, strong) ViewController *vc;
@end

@implementation XCTestZcTests

- (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)用
    _vc = [[ViewController alloc] init];
}

- (void)tearDown {
    // Put teardown code here. This method is called after the invocation of each test method in the class.
    // 釋放測(cè)試用例的資源,每個(gè)測(cè)試用例執(zhí)行后調(diào)用
    self.vc = nil;
    [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è)試用例  (一定要test開頭)
    int result = [self.vc number];
    XCTAssertEqual(result, 10,@"hahaha");
    XCTAssertTrue(result);
    
}

- (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è)試性能的代碼
    }];
}

//- (void)testTear{
//    int result = [self.vc number];
//    XCTAssertFalse(result);
//}

- (void)testPerformaneHaha{
    [self measureBlock:^{
        NSLog(@"test");
    }];
}

@end

真正的大師蕊温,永遠(yuǎn)懷著一顆學(xué)徒的心——易

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末袱箱,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子义矛,更是在濱河造成了極大的恐慌发笔,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凉翻,死亡現(xiàn)場(chǎng)離奇詭異了讨,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)制轰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門前计,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人垃杖,你說我怎么就攤上這事男杈。” “怎么了调俘?”我有些...
    開封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵伶棒,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我彩库,道長(zhǎng)肤无,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任侧巨,我火速辦了婚禮舅锄,結(jié)果婚禮上鞭达,老公的妹妹穿的比我還像新娘司忱。我一直安慰自己皇忿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開白布坦仍。 她就那樣靜靜地躺著鳍烁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪繁扎。 梳的紋絲不亂的頭發(fā)上幔荒,一...
    開封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音梳玫,去河邊找鬼爹梁。 笑死,一個(gè)胖子當(dāng)著我的面吹牛提澎,可吹牛的內(nèi)容都是我干的姚垃。 我是一名探鬼主播,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼盼忌,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼积糯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起谦纱,我...
    開封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤看成,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后跨嘉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體川慌,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年祠乃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了窘游。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡跳纳,死狀恐怖忍饰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情寺庄,我是刑警寧澤艾蓝,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站斗塘,受9級(jí)特大地震影響赢织,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜馍盟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一于置、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧贞岭,春花似錦八毯、人聲如沸搓侄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽讶踪。三九已至,卻和暖如春泊交,著一層夾襖步出監(jiān)牢的瞬間乳讥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工廓俭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留云石,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓研乒,卻偏偏與公主長(zhǎng)得像留晚,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子告嘲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 簡(jiǎn)介 測(cè)試目的:模擬多種可能性错维,減少錯(cuò)誤,增強(qiáng)健壯性橄唬,提高穩(wěn)定性赋焕。 測(cè)試種類:在iOS中的通常分為單元測(cè)試和UI測(cè)...
    i順頌時(shí)宜閱讀 9,137評(píng)論 0 39
  • 單元測(cè)試不是一個(gè)小工程,需要多用些時(shí)間才能做好仰楚,不要希望通過這個(gè)文章就能掌握單元測(cè)試隆判,這只是一個(gè)入門,需要自己動(dòng)手...
    勇不言棄92閱讀 7,825評(píng)論 9 60
  • 前言 單元測(cè)試和UI測(cè)試大致步驟網(wǎng)上很多文章都有僧界,如果會(huì)的可以忽略侨嘀,關(guān)鍵是錯(cuò)誤總結(jié),網(wǎng)上很少有文章提及到捂襟,感興趣的...
    _YGL_閱讀 5,181評(píng)論 20 23
  • 轉(zhuǎn)自:http://www.reibang.com/p/009844a0b9ed 什么是單元測(cè)試咬腕?一聽到單元測(cè)試這...
    YYT1992閱讀 855評(píng)論 0 2
  • /*------------使用Xcode自帶單元測(cè)試UnitTest-----*/ /* 單元測(cè)試:就是為...
    彬至睢陽閱讀 263評(píng)論 0 0