iOS單元測試

領導給的需求是:


關于單元測試的任務反饋:

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

這個我們能用不?有什么用


我將就三個方面回答上面的問題。

1.首先我們來關注下單元測試有什么用?

2.我們的項目能用不?如何用

3.單元測試的一些相關知識

1.首先我們來關注下單元測試有什么用?

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

在計算機編程中,單元測試(又稱為模塊測試, Unit Testing)是針對程序模塊(軟件設計的最小單位)來進行正確性檢驗的測試工作。程序單元是應用的最小可測試部件。在過程化編程中,一個單元就是單個程序、函數、過程等;對于面向對象編程,最小單元就是方法,包括基類(超類)、抽象類、或者派生類(子類)中的方法。

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

由于我們OC程序員寫的通常都是面向對象的程序,所以我們在進行單元測試時,通常都是以一個方法為單位測試,目的當然是保證其不會出錯了。按照Objc.io文章的觀點,如果我們代碼之間的耦合度很小,那么可以將其分解成多個小部件,從而更易于測試。

2.我們的項目能用不?如何用

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

我們的項目能不能用,答案是肯定的,按照領導給的鏈接操作是可以正常添加單元測試的,我們測試的時候可能只是一個方法一個方法的去測試,這就必須接口文件和實現文件有良好的代碼風格,最主要的是上面的紅色的文字。

3.單元測試的一些相關知識

首先單元測試的框架有幾個鏈接如下: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更傾向于所謂的白盒測試,用于測試工程中較細節的邏輯;Application Tests更傾向于黑盒測試,或接口測試,用于測試直接與用戶交互的接口。

? 創建測試用例

OCUnit的測試用例最常用的方法有三個

1. - (void)setUp:每個test方法執行前調用

2. - (void)tearDown:每個test方法執行后調用

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

GHUnit

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

當你創建項目或者對象(target)時,Xcode會在構建應用程序的scheme中包含一個單元測試對象。對象的實現文件包含setUp、tearDown以及testExample方法的存根。完成這些存根實現,并根據需要為執行應用程序上的單元測試添加其他代碼。通過選擇Product > Test來運行所有測試。點擊測試導航器圖標來查看狀態和測試結果。點擊測試導航欄右下角的按鈕(+)為項目添加測試對象(或者為測試添加類)。想要查看特定測試的源碼,請在測試列表中選中,源碼編輯器將會打開相應的文件。

會簡單的操作以后, 我們了解下相關的斷言


下面一共18個斷言(SDK中也是18個,其含義轉自ios UnitTest 學習筆記,真心佩服原文的博主,部分宏小弟已經測試過):

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語言標量、結構體或聯合體時使用,實際測試發現NSString也可以);

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

特別注意下XCTAssertEqualObjects和XCTAssertEqual。

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

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

最后看一下官方的一個計算器的Demo吧 ,看了基本上明白個大概了

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

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


感覺這個計算器主要是功能上的測試,單元測試即是模塊測試, 我們應用程序接入的可能感覺不大。

因為平時斷點就夠用的了, 這只是我的片面之理解。可能理解的不到位。



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

請高手回答幫助, 給個鏈接啥的也行, 多謝。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,182評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,489評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,290評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,776評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,510評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,866評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,860評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,036評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,585評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,331評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,536評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,058評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,754評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,154評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,469評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,273評論 3 399
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,505評論 2 379

推薦閱讀更多精彩內容

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