iOS開發 使用OCUnit對程式進行單元測試(UnitTest)

來源:互聯網
上載者:User

標籤:

    所謂單元測試(又稱為模組測試, Unit Testing)就是針對程式模組(軟體設計的最小單位)來進行正確性檢驗的測試工作。

    其實在我們開發的程式實現某個功能的時候我們也有進行測試。只不過,你是在項目代碼中直接寫的方法,而且在測試的時候,也是點點點,點到相應的介面才觸發相應的方法,進行測試,這測試效率,想想也是醉了,不過還好能正常測試,但是如果你想控制不同的輸入參數呢?好,你說直接寫入到程式。但是,你測試完成了之後呢?好,你說那就注釋掉啊。但是,如果後面你改動了又需要再測試一此呢?其實,說了這麼多,就是想說,在你的有效工程代碼外寫測試代碼,這就是單元測試了,完成後,一個Command+U直接進入入口進行代碼測試。

    接下來就是怎麼進行代碼測試,這個網路一搜一大堆,但是都是在那個test.m檔案裡面直接寫寫寫得節奏,看了你肯定會問,就在這裡寫一些判斷1+1=?2的代碼?這什麼情況。其實不是這樣子的。按照目前Xcode的版本建立是這樣子的:

    1、直接建立項目,預設就已經有了那個所謂的TestOCUnitTestTests.m檔案,建立完成之後如下,你直接看到了一個TestOCUnitTestTests.m檔案,那個就是放測試代碼的檔案了。

    2、點擊你平時運行項目的那個三角形右邊的TestOCUnitTest可以看到新出來三個選項,new一個Scheme,然後把項目切換到TestOCUnitTestTests裡面,按住Command+U,會彈出一個Test Succeeded的提示框,表示成功。

    3、接下來說說怎麼測試我們項目裡面的某個類的方法,我們隨便在自己的某個類建立一個方法,我就選在MasterViewController這個類裡面好了。具體實現的方法是在接收到的字串用[]包住,然後返回,代碼如下:

- (NSString *)getTestString:(NSString *)normalStr{    return [NSString stringWithFormat:@"[%@]",normalStr];}


    記得聲明成外部可調用方法!

    4、在TestOCUnitTestTests.m檔案裡面調用這個方法:

- (void)testExample {        //1、找一個你需要進行單元測試的類,執行個體化    MasterViewController *controller = [[MasterViewController alloc]init];        NSString *normalStr = @"Objective-C";    NSString *expectStr = @"[Objective-C]";        //2、調用該對象需要進行單元測試的方法    NSString *returnStr = [controller getTestString:normalStr];    //3、斷言你預想中得傳回值及實際傳回值是否符合    NSLog(@"Is MasterViewController testStr getRightStr:");    XCTAssertEqualObjects(expectStr,returnStr, @"pass");}

可以運行之後,可以看到方法左邊打了個鉤鉤,說明測試是通過的。(PS:寫在TestOCUnitTestTests.m裡面的所有方法會預設執行,不用你手工去調用)

    如果你測試的是你項目中的其他方法,那麼直接在在TestOCUnitTestTests.m裡面直接建立測試方法,傳參後斷言測試返回資料是否跟預期的一樣就行了,以上就是單元測試的使用。

    對於一些常用的斷言測試函數,我直接拷貝過來好了,如下所示:

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沒有發生具體異常、具體異常名稱的異常時通過測試,反之不通過



iOS開發 使用OCUnit對程式進行單元測試(UnitTest)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.