iOS开发 简述使用OCUnit对程序进行单元测试(UnitTest)
2019獨角獸企業重金招聘Python工程師標準>>>
????所謂單元測試(又稱為模塊測試, 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沒有發生具體異常、具體異常名稱的異常時通過測試,反之不通過
轉載于:https://my.oschina.net/caijunrong/blog/492932
總結
以上是生活随笔為你收集整理的iOS开发 简述使用OCUnit对程序进行单元测试(UnitTest)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 150814
- 下一篇: 两种计算和输出n内5要么9除尽互惠