iOS開發中的單元測試(一)

2021-06-15 02:56:24 字數 2520 閱讀 6319

文章**:

本文對比兩個ios開發中常見的單元測試框架:ocunit,被官方整合進xcode 4.x版本中;ghunit,被推薦最多的測試框架,帶gui介面。初窺兩款測試框架非常相似,而上手使用就會發現其中的區別。細節上的區別使兩款框架在不同角度各有優劣。

ocunit

• 新增單元測試

ocunit是xcode整合的,所以其與工程的結合理應是最好的,新增到工程中的成本也理應最低。使用xcode建立新工程的流程中就有乙個「include unit tests」的選項(如圖1),新的工程就會自動生成乙個logic tests。

向已存在的工程中新增ocunit logic tests也不複雜,只需要新增乙個型別為:「cocoa touch unit testing bundle」的target即可(如圖2)。

圖2,向已存在的工程中新增ocunit測試

向已有工程中新增乙個測試target時,xcode會自動生成乙個scheme,執行單元測試用例和build原工程需要切換不同的scheme。如果認為切換scheme非常麻煩,也可以在新增target之前,在「manage scheme」選單中取消「autocreate schemes」(如圖3)。

圖3,新增target不建立scheme

2. 再搜尋「test host」,設定為:$(bundle_loader)

3. 在build phases-target dependencies中新增依賴,選擇主程式target

• 建立測試用例

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

1. - (void)setup:每個test方法執行前呼叫

2. - (void)teardown:每個test方法執行後呼叫

3. - (void)test***:命名為***的測試方法

新增target之時xcode已經自動建立了乙個測試用例類:unittestdemotests,其中unittestdemo是工程的名字,該類中已經包含了setup,teardown和testexample三個方法。

通過command+n,選擇「objective-c test case class」建立乙個新的測試用例類(如圖5)。通過xcode建立的測試用例類是乙個繼承自sentestcase(ocunit由sen:te公司開發,因此基類命名為sentestcase)的空類,需要模仿unittestdemotests編寫測試方法。

圖5,建立乙個測試用例類

開發者可以自己實現無返回值,且命名規則為test***的例項方法,並使用框架提供的大量斷言方法。

值得注意的是,ocunit的test bundle是侵入主應用的,因此在使用過程中要十分注意,不要讓單元測試的資源覆蓋主應用資源,造成詭異的bug。

• 執行測試

由於ocunit是整合在xcode中的框架,因此在xcode中執行也比較方便。切換到單元測試的scheme(如果與工程共用scheme則無需切換),product->test(或直接使用快捷鍵command+u),框架會自動查詢所有工程中sentestcase的子類,執行其中全部命名類似test***的無返回值方法。

• 測試反饋

ocunit的失敗方法會通過console和xcode issues兩個位置反饋,通過xcode issues可以直接定位到出現錯誤的單元測試**行。issue的提示資訊就是在單元測試斷言方法中定義的description。

ghunit

• 新增單元測試

圖6,在新target中新增ghunitios.framework

在build phases中新增非官方框架並不會把框架檔案拷貝到工程目錄,而是只做乙個鏈結,所以建議在新增之前先把框架拷貝到工程目錄下。

,選擇ghunitios.framework

接下來用相同的方法新增框架依賴的其他庫:「quartzcore.framework」。

在build settings中搜尋「linker flags」,設定other linker flags - debug - 新增乙個支援全架構和全版本sdk的標示「-objc -all_load」(如圖8)。

,設定linker flags

,修改main函式

,單元測試

• 建立測試用例

建立ghunit測試用例與建立ocunit測試用例相似。

新建乙個objective-c class檔案,繼承自ghtestcase,在xcode生成的.h檔案中不會匯入ghunit.h檔案,需要開發者自行匯入「#import 」。

ghunit框架提供斷言方法比ocunit更加豐富,開發用例也就可以做的更加細緻,更有利查詢/定位錯誤。

• 執行測試

,兩個用例的

• 測試反饋

,未通過測試的方法,

console

中的內容 總結

本文簡單介紹了兩款框架的安裝與入門,可以初步了解其各自特點,在接下來的文章中將會更加詳細的介紹如何使用框架進行單元測試,以及框架中的一些高階功能。此外,後續還將向大家介紹另外的與這兩款框架區別更加明顯的單元測試框架。

高嘉峻(微博:@gaosboy),segmentfault.com聯合創始人,杭州ios開發者沙龍發起人,資深ios開發者。

iOS開發中的單元測試(一)

本文對比兩個ios開發中常見的單元測試框架 ocunit,被官方整合進xcode 4.x版本中 ghunit,被推薦最多的測試框架,帶gui介面。初窺兩款測試框架非常相似,而上手使用就會發現其中的區別。細節上的區別使兩款框架在不同角度各有優劣。ocunit 新增單元測試 向已存在的工程中新增ocun...

iOS開發中,單元測試的好處

1.什麼是單元測試?答 單元測試是蘋果為了方便我們進行某一模組業務的檢測而推出的測試環境!所謂測試環境就是另乙個我們寫 的地方。它存在於我們專案不同的資料夾下面。2.怎麼使用單元測試?答 可以直接在系統寫好的test.m中寫測試 當然也可以自己新建乙個測試檔案。當然你也可以自己新建乙個單元測試類!x...

iOS開發單元測試

什麼是單元測試 首先什麼是單元測試?維基百科中的解釋是 在計算機程式設計中,單元測試 又稱為模組測試 unit testing 是針對程式模組 軟體設計的最小單位 來進行正確性檢驗的測試工作。程式單元是應用的最小可測試部件。在過程化程式設計中,乙個單元就是單個程式 函式 過程等 對於物件導向程式設計...