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異常時通過;反之發生其他異?;虿话l生異常均不通過;

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程序就行了


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

因為平時斷點就夠用的了, 這只是我的片面之理解??赡芾斫獾牟坏轿弧?/p>



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

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

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