我也會用Xcode做單元測試(Unit Test) PART 1

Unit Testing
寫專案其實最害怕的,莫過於其中某個元件或是類別裡面的邏輯是有問題的,這樣一來的話就會一直跑出錯誤的結果,而且沒有錯誤訊息可以從Console端看出來,這種BUG有時候是需要非常多的時間才能被找出來的。

那怎麼辦呢?所以就有人提出了單元測試(Unit Testing)的觀念,那在Xcode中可以這麼做嗎?這個答案是肯定的,最棒的是Xcode本身就內建了OCUnit Framework,所以我們可以很簡單的用Xcode內建的東西來完成單元測試的動作,這也是今天這篇文章的目的,快快樂樂做單元測試。

開啟專案首先在Xcode建立一個新的專案,並記得在最下方的Checkbox中勾選include Unit Tests的選項,這樣Xcode在開專案時就會順便幫你處理OCUnit Framework的設置動作。

設置Unit Test專案
你可以看到Xcode已經幫你設置好所有的事情了,你不需要做任何的事情,所以你可以直接在UnitTestSampleTests.h和UnitTestSampleTests.m中直接撰寫你的測試碼即可。

測試專案
至於要怎麼開始測試?簡單,你可以從上方的工具欄中選取 Product > Test 來進行測試。

第一次測試結果
跑了一下子後,你應該就能在 Log 和 Console 中看到測試完的結果,如果沒有意外的話,你將可以至少看到一個 error 的警告,因為在預設的 Template 中他會有一個故意產生錯誤的 Sample code。

SimpleMath.h
好吧,為了作示範,我們來做一個完全 HelloWorld 等級的例子,我們設計一個 SimpleMath 類別,來做簡單的數學判斷。

SimpleMath.m
程式馬如上所示,恩…這應該不用解釋內容了,反正就是判斷是否為奇偶的靜態方法,自己看code了。

引入SimpleMath
完成後在 UnitTestSampleTests.h 中引入 SimpleMath.h ,這樣我們就能拿出來測試使用了。

撰寫測試代碼
建立一個新的方法叫 testDemo 的方法,你可以看到 OCUnit Framework 中提供了一堆STAssert 系列的方法供你做測試使用,在這次例子中我們意思意思做了兩個基本不過的測試,也就是把 SimpeMath 中的 isEven 和 isOdd 拿出來做測試。

測試 SimpleMath
我們先不管 setUp 和 tearDown 這兩個方法,改天我會再另開一篇來做解釋,既然是 PART 1 ,還是簡單清楚為上,你可以看到我用 STAssertTrue 來測試運算傳回來的結果,當然這跟當初你所設計類別方法傳回的資料形態有關,第一個參數為測試的 code ,第二個參數為測試錯誤時的警告訊息,你高興打什麼都可以,這由你自己決定。

SimpleMath 測試結果
完成後再度到 Product > Test 下去進行測試,賓果!你可以看到警告訊息中出現了一個錯誤,並且指出 [SimpleMath isOdd:20] 與預期結果不同,這樣你就可以非常的明確知道到底哪邊的 code 是有問題的,並從此處進行錯誤追蹤。

好啦,你可以藉由這個簡單的例子了解到 Unit Testing 的用處,那就是你可以用簡單的方法將你寫好的程式去進行驗證,這尤其是當多人在開發的環境中,拿來檢查是哪個傢伙w捅出了婁子,並方便毒打他一頓。(誤)

下次我們在 PART 2 中再來進步解釋關於 Unit Test 中比較詳細的做法。

 

本篇發表於 Objective C 與標籤於 anistar固定網址書籤。
本文引用:
文章內容為ANISTAR BLOG所有,引用分享請以鏈結形式註明出處與原始作者。

關於 anistar

現任:台灣區 Yahoo! 專長: Objective C、iOS SDK、Android SDK、Flex 4、RIA、ActrionScript 3、HTML5、CSS3、JQuery、JQuery Mobile、C++、PHP、MySQL...等整合運用。 著作:《Run!PC雜誌》專欄作家、《CADesigner雜誌》專欄作家、《Flash CS3 Professional ActionScript 3.0 打造互動設計力與美》、《新一代互動體驗Flex+AIR程式開發》。 認證:Macromedia Certified Instructor in ColdFusion    Adobe Certified Expert in Photoshop    Adobe Certified Instructor in Flex

3 則迴響於《我也會用Xcode做單元測試(Unit Test) PART 1

  1. 你好,剛好看到你的文章,有些問題想要請教你一下

    最近也在研究單元測試的部分
    不過一直有個疑問
    就是在開發app的時候,往往需要大量的UI操作
    而網路上大部分教單元測試的文章都是測試某個function的邏輯對不對

    那如果我想要連同UI一起測試該怎麼辦呢?
    例如我寫好一個app 通常我都是手動去點點看我要的功能 然後看有沒有什麼bug(例如crash or UI畫面跟我預計呈現的不同),然後在從console去看log,請問這樣的操作有辦法做到自動測試嗎?
    在Android上我有試過MonkeyRunner的測試方式,不知道在iOS上有沒有類似的東西
    感謝~

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *