OCUnit的運行結果會通過彈窗直接告訴開發者,運行的細節信息則會打印在Xcode的輸出窗口中:
GHUnit的運行結果則全部顯示在自己的應用界面中,開發者可以在應用中查看所有的信息,以及做運行測試等各種各樣的操作。
關于如何使用OCUnit和GHUnit, InfoQ上有高嘉峻的文章《iOS開發中的單元測試》(http://www.infoq.com/cn/articles/ios-unit-test-1)有詳細的介紹,我就不再這兒重復敘述了。
如果單從單元測試框架來看,個人更喜歡GHUnit測試結果的可讀性和運行測試的靈活性,但是,隨著Facebook的xctool的發布,OCUnit華麗麗的逆襲了,因為xctool幫助OCUnit把運行測試的靈活性和測試結果的可讀性這兩塊短板給補齊了,再加上其和Xcode的集成優勢以及通過命令行運行的便捷性,讓其成為持續集成平臺的Unit測試框架的首選。
在Java程序員的心中,Junit和Hamcrest永遠是一體的,Hamcrest為junit提供了非常豐富的斷言機制,極大的增強了測試的可讀性。越來越活躍的iOS開發社區,當然不會讓Object-C的世界缺失這樣一個優秀的框架,于是OCHamcrest【13】誕生了。
在測試項目中使用OCHamcrest非常簡單,尤其是使用了cocoapods管理依賴的項目。只需要在Podfile文件中加上:
target : do ...
pod 'OCHamcrest'
end
然后,運行“pod install”命令安裝Hamcrest到測試Target,安裝好之后,為了在測試類中使用OCHamcrest的斷言。還需要在測試類的頭文件中加入如下代碼:
#define HC_SHORTHAND
#import
開發者可以把這段代碼加入-prefix.pch中,這樣所有的測試類就都可以使用 OCHamcrest的斷言了。在前面提到的高嘉峻的文章中的第二部分更加詳細的講解了OCHamcrest的斷言,以及其和另一個斷言框架 Expecta的對比,感興趣的同學可以跳過去看看(http://www.infoq.com/cn/articles/Matching- Engine-Enliven-Assertion-2?utm_source=infoq& utm_medium=related_content_link& utm_campaign=relatedContent_articles_clk)。
Component Test & Integration Test
在開發手機應用時,總難免會和其他的系統集成,尤其當開發的應用是某個系統的手機客戶端時,這樣就涉及到很多第三方API的集成點需要測試,在成熟的Java世界中,誕生了EasyMock,Mockito,moco等針對這種集成點的測試工具。同樣的,活躍的社區力量正一步一步的在讓 Object-C世界成熟,OCMock【14】誕生。
OCMock
有了cocoaPods,新加框架變得非常容易,基本上就是“哪里沒有加哪里”的節奏,添加OCMock框架,只需要在Podfile文件中加上:
target : do...
pod 'OCMock', '~> 2.0.1'
end
然后,運行“pod install”命令安裝OCMock到測試Target,同樣的,需要把OCmock的頭文件添加-prefix.pch文件中
#import
下面是一個簡單的使用OCMock的例子,更多的用法請參考OCMock的官網:http://ocmock.org/features/:
- (void)testSimpeMockPass{
idmockObject = [OCMockObjectmockForClass:NSString.class];
[[[mockObject stub] andReturn:@"test"] lowercaseString];
NSString * returnValue = [mockObjectlowercaseString];
assertThat(returnValue, equalTo(@"test"));
}
moco
moco【15】以其對系統集成點測試的貢獻榮獲了2013年的“Duke's Choice Award”獎,雖然其以Java寫成,主要的生態系統也是圍繞Java打造,但是,其Standalone模式可以非常方便的構造一個開發者期望的服務器,這對于Mobile領域的集成點測試來說,本就是一個非常好的Mock服務器的工具。Moco有如下的特點:
易于配置,使用:一個Json配置文件,然后“java -jar moco-runner--standalone.jar -p 8080 ***.json”就可以啟動一個Mock服務器。該服務器的所有行為都在配置文件里。如果你想添加,修改服務器行為,只需要修改一下配置文件,然后重新啟動該服務器就行了。
配置文件可讀性好,使用Json格式的配置文件,對絕大多數開發者來說都可以很容易理解。
支持模擬客戶端需要的所有http操作,moco實現了針對請求Content、URI、Query Parameter、Http Method、Header、Xpath的模擬。對響應的格式支持有Content、Status Code、Header、URL、甚至支持Sequence請求,即根據對同一請求的調用次數返回不同的結果。
完全開源,代碼不多也比較易懂,如果沒有覆蓋到我們的場景,完全可以在該項目基礎上實現一個自己的Mock服務器 。
熊節在infoQ上發表的《企業系統集成點測試策略》【16】一文中,詳細的論述了在企業系統中,moco對測試系統集成點的 幫助。這些論點在Mobile開發領域同樣適用,因此合理的使用moco可以幫助iOS開發者更加容易的構建一個穩固的持續集成平臺。
System Test
對于iOS的系統(UI)測試來說,比較知名的工具有UIAutomation【17】和FonMonkey【18】。
UIAutomation
UIAutomation是隨著iOS SDK 4.0引入,幫助開發者在真實設備和模擬器上執行自動化的UI測試。其本質上是一個Javascript的類庫,通過 界面上的標簽和值的訪問性來獲得UI元素,完成相應的交互操作,從而達到測試的目的,類似于Web世界的Selenium。
通過上面的描述,可以得知,使用UIAutomation做測試時,開發者必須掌握兩件事:
如何找到界面上的一個UI元素
如何指定針對一個UI元素的操作
原文轉自:http://www.kuqin.com/shuoit/20130920/335289.html