iOS單元測試

領(lǐng)導(dǎo)給的需求是:


關(guān)于單元測試的任務(wù)反饋:

http://www.lxweimin.com/p/d15a7dea0c5a?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io

這個(gè)我們能用不?有什么用


我將就三個(gè)方面回答上面的問題。

1.首先我們來關(guān)注下單元測試有什么用?

2.我們的項(xiàng)目能用不?如何用

3.單元測試的一些相關(guān)知識(shí)

1.首先我們來關(guān)注下單元測試有什么用?

首先什么是單元測試,維基百科上的解釋是:

在計(jì)算機(jī)編程中,單元測試(又稱為模塊測試, Unit Testing)是針對(duì)程序模塊(軟件設(shè)計(jì)的最小單位)來進(jìn)行正確性檢驗(yàn)的測試工作。程序單元是應(yīng)用的最小可測試部件。在過程化編程中,一個(gè)單元就是單個(gè)程序、函數(shù)、過程等;對(duì)于面向?qū)ο缶幊蹋钚卧褪欠椒ǎɑ悾ǔ悾⒊橄箢悺⒒蛘吲缮悾ㄗ宇悾┲械姆椒ā?/p>

通常來說,程序員每修改一次程序就會(huì)進(jìn)行最少一次單元測試,在編寫程序的過程中前后很可能要進(jìn)行多次單元測試,以證實(shí)程序達(dá)到軟件規(guī)格書(en:Specification)要求的工作目標(biāo),沒有程序錯(cuò)誤;雖然單元測試不是什么必須的,但也不壞,這牽涉到項(xiàng)目管理的政策決定。

由于我們OC程序員寫的通常都是面向?qū)ο蟮某绦颍晕覀冊(cè)谶M(jìn)行單元測試時(shí),通常都是以一個(gè)方法為單位測試,目的當(dāng)然是保證其不會(huì)出錯(cuò)了。按照Objc.io文章的觀點(diǎn),如果我們代碼之間的耦合度很小,那么可以將其分解成多個(gè)小部件,從而更易于測試。

2.我們的項(xiàng)目能用不?如何用

簡單的講 其實(shí)單元測試功能就是測試某一塊代碼段有沒有問題,而具體的測試就是執(zhí)行某一個(gè)類的代碼,得出一個(gè)結(jié)果,使用斷言的方式展示給你。你不必每次運(yùn)行起來看看效果, 所以你僅僅使用Comman+U 代替Command + R 就可以測試你自定義的代碼就行了,就是直接跑那些你抽取出來的代碼就行了。

我們的項(xiàng)目能不能用,答案是肯定的,按照領(lǐng)導(dǎo)給的鏈接操作是可以正常添加單元測試的,我們測試的時(shí)候可能只是一個(gè)方法一個(gè)方法的去測試,這就必須接口文件和實(shí)現(xiàn)文件有良好的代碼風(fēng)格,最主要的是上面的紅色的文字。

3.單元測試的一些相關(guān)知識(shí)

首先單元測試的框架有幾個(gè)鏈接如下:http://www.uml.org.cn/mobiledev/201201093.asp

也可以看看這篇文章http://www.cocoachina.com/industry/20130724/6667.html

OCUnit

OCUnit是XCode 4.x集成的單元測試框架,OCUnit中的測試分為兩類,一類稱為Logic Tests,另一類稱為Application Tests。Logic Tests更傾向于所謂的白盒測試,用于測試工程中較細(xì)節(jié)的邏輯;Application Tests更傾向于黑盒測試,或接口測試,用于測試直接與用戶交互的接口。

? 創(chuàng)建測試用例

OCUnit的測試用例最常用的方法有三個(gè)

1. - (void)setUp:每個(gè)test方法執(zhí)行前調(diào)用

2. - (void)tearDown:每個(gè)test方法執(zhí)行后調(diào)用

3. - (void)testXXX:命名為XXX的測試方法

GHUnit

GHUnit是一款Objective-C的測試框架,除了支持iOS工程還支持OSX的工程,但OSX不在本文的討論范圍。GHUnit不同于OCUnit,它提供了GUI界面來操作測試用例,而且也不區(qū)分Logic Tests和Application Tests。

當(dāng)你創(chuàng)建項(xiàng)目或者對(duì)象(target)時(shí),Xcode會(huì)在構(gòu)建應(yīng)用程序的scheme中包含一個(gè)單元測試對(duì)象。對(duì)象的實(shí)現(xiàn)文件包含setUp、tearDown以及testExample方法的存根。完成這些存根實(shí)現(xiàn),并根據(jù)需要為執(zhí)行應(yīng)用程序上的單元測試添加其他代碼。通過選擇Product > Test來運(yùn)行所有測試。點(diǎn)擊測試導(dǎo)航器圖標(biāo)來查看狀態(tài)和測試結(jié)果。點(diǎn)擊測試導(dǎo)航欄右下角的按鈕(+)為項(xiàng)目添加測試對(duì)象(或者為測試添加類)。想要查看特定測試的源碼,請(qǐng)?jiān)跍y試列表中選中,源碼編輯器將會(huì)打開相應(yīng)的文件。

會(huì)簡單的操作以后, 我們了解下相關(guān)的斷言


下面一共18個(gè)斷言(SDK中也是18個(gè),其含義轉(zhuǎn)自ios UnitTest 學(xué)習(xí)筆記,真心佩服原文的博主,部分宏小弟已經(jīng)測試過):

XCTFail(format…) 生成一個(gè)失敗的測試;

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í)使用,實(shí)際測試發(fā)現(xiàn)NSString也可以);

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í)通過測試;

XCTAssertNotEqualWithAccuracy(a1, a2, accuracy, format...) 判斷不等,(double或float類型)提供一個(gè)誤差范圍,當(dāng)在誤差范圍以內(nèi)不等時(shí)通過測試;

XCTAssertThrows(expression, format...)異常測試,當(dāng)expression發(fā)生異常時(shí)通過;反之不通過;(很變態(tài)) XCTAssertThrowsSpecific(expression, specificException, format...) 異常測試,當(dāng)expression發(fā)生specificException異常時(shí)通過;反之發(fā)生其他異常或不發(fā)生異常均不通過;

XCTAssertThrowsSpecificNamed(expression, specificException, exception_name, format...)異常測試,當(dāng)expression發(fā)生具體異常、具體異常名稱的異常時(shí)通過測試,反之不通過;

XCTAssertNoThrow(expression, format…)異常測試,當(dāng)expression沒有發(fā)生異常時(shí)通過測試;

XCTAssertNoThrowSpecific(expression, specificException, format...)異常測試,當(dāng)expression沒有發(fā)生具體異常、具體異常名稱的異常時(shí)通過測試,反之不通過;

XCTAssertNoThrowSpecificNamed(expression, specificException, exception_name, format...)異常測試,當(dāng)expression沒有發(fā)生具體異常、具體異常名稱的異常時(shí)通過測試,反之不通過

特別注意下XCTAssertEqualObjects和XCTAssertEqual。

XCTAssertEqualObjects(a1, a2, format...)的判斷條件是[a1 isEqual:a2]是否返回一個(gè)YES。

XCTAssertEqual(a1, a2, format...)的判斷條件是a1 == a2是否返回一個(gè)YES。

最后看一下官方的一個(gè)計(jì)算器的Demo吧 ,看了基本上明白個(gè)大概了

https://developer.apple.com/library/prerelease/mac/samplecode/UnitTests/Introduction/Intro.html

忽略里面的mac程序, 跑iOS程序就行了


感覺這個(gè)計(jì)算器主要是功能上的測試,單元測試即是模塊測試, 我們應(yīng)用程序接入的可能感覺不大。

因?yàn)槠綍r(shí)斷點(diǎn)就夠用的了, 這只是我的片面之理解。可能理解的不到位。



最后有個(gè)問題,單元測試局限么? 比如某一個(gè)功能是否真的都可以用單元測試去測試?單元測試進(jìn)階改如何?

請(qǐng)高手回答幫助, 給個(gè)鏈接啥的也行, 多謝。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,702評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,143評(píng)論 3 415
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,553評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,620評(píng)論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,416評(píng)論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,940評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,024評(píng)論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,170評(píng)論 0 287
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,709評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,597評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,784評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,291評(píng)論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,029評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,407評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,663評(píng)論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,403評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,746評(píng)論 2 370

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

  • 單元測試不是一個(gè)小工程,需要多用些時(shí)間才能做好,不要希望通過這個(gè)文章就能掌握單元測試,這只是一個(gè)入門,需要自己動(dòng)手...
    勇不言棄92閱讀 7,835評(píng)論 9 60
  • /*------------使用Xcode自帶單元測試UnitTest-----*/ /* 單元測試:就是為...
    彬至睢陽閱讀 268評(píng)論 0 0
  • Unit Test簡介 單元測試,通常一個(gè)單元指的就是應(yīng)用程序中可以測試的最小單元,xCode5在創(chuàng)建工程的時(shí)候就...
    大猿媛閱讀 249評(píng)論 0 0
  • //聯(lián)系人:石虎QQ:1224614774昵稱:嗡嘛呢叭咪哄 一、斷言 注意:另外XCTest還支持異步單元測試,...
    石虎132閱讀 415評(píng)論 0 4
  • 生成一個(gè)失敗的測試 為空判斷,a1為空時(shí)通過,反之不通過 不為空判斷,a1不為空時(shí)通過,反之不通過 當(dāng)expres...
    MonkeyBread閱讀 310評(píng)論 0 0