上一篇文章簡單介紹了OCUnit和GHUnit兩款iOS開發中較為常見的單元測試架構,本文進一步介紹單元測試 中的另一利器——匹配引擎(Matcher Engine)。匹配引擎可以替代斷言方法,配合單元測試引擎使用,測試 用例可以更多樣化,更細緻。
傳統斷言提供的方法數量和功能都有限,以導讀中提到的兩款架構為例 ,即使是斷言相對豐富的GHUnit也只是提供了38種斷言方法,範圍僅涵蓋了邏輯比較,異常和出錯等少數幾方 面,仍然很單一。而使用匹配引擎代替斷言,可能性就大大豐富了,除了普通斷言支援的規則,一般的引擎還 預設提供了包含,區間,繼承關係等。更重要的是,使用匹配引擎開發人員可以自行開發匹配規則,引入與業務 相關的邏輯判斷。
本文要介紹兩款匹配引擎,一款就是Hamcrest的Objective-C實現——OCHamcrest, 另一款則是專為Objective-C/Cocoa而生的後來者——Expecta。接下來將結合GHUnitTest,介紹兩款匹配引擎 如何在單元測試中發揮作用(有關GHUnitTest參考《iOS開發中的單元測試(一)》。
OCHamcrest
介紹匹配引擎必須要提Hamcrest,幾乎已經成為匹配引擎的代名詞。官網首頁上 的一句話表明了它的身世:“Born in Java, Hamcrest now has implementations in a number of languages.”。這款誕生於Java的匹配引擎現在還支援除Java的Python、Ruby、PHP、Erlang和Objective-C。
加入工程
在iOS工程中使用OCHamcrest需要先擷取OCHamcrestIOS.framework,可以從Quality Coding直接下載,或 在Github上擷取源碼編譯。注意:Github上託管的OCHamcrest工程以Submodule的形式關聯原始碼,因此如果 使用命令列方式clone工程,需要執行“git submodule update --init”。
下載源碼後,進入Source 目錄,執行MakeDistribution.sh指令碼,將會在Source/build/Release下產生OCHamcrest.framework、 OCHamcrestIOS.framework和OCHamcrest.framework.dSYM , OCHamcrestIOS.framework就是iOS工程中需要用 到的架構,如圖1。
圖1,從源碼編譯產生 OCHamcrestIOS.framework
開啟已經安裝了GHUnitTest的工程,把OCHamcrestIOS.framework添加到單 元測試的Target中。在需要使用匹配引擎的用例中,定義“HC_SHORTHAND”並匯入 “<OCHamcrestIOS/OCHamcrestIOS.h>”(如圖2)。
圖2,把 OCHamcrestIOS.framework匯入工程
至此OCHamcrest已經安裝完成,可以再測試案例中使用匹配規則代 替GHUnitTest的斷言方法。