精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

XCode下的iOS單元測試

移動開發 iOS
XCode 內置了 OCUnit 單元測試框架,但目前最好用的測試框架應該是 GHUnit。通過 GHUnit + OCMock 組合,我們可以在 iOS 下進行較強大的單元測試功能。本文將演示如何在 XCode 4.2 下使用 OCUnit, GHUnit 和 OCMock 進行單元測試。

OCUnit

在 XCode 下新建一個 OCUnitProject 工程,選中 Include Unit Tests 選擇框,

OCUnit 框架則會為我們自動添加 Unit Test 框架代碼:

XCode 在 OCUnitProjectTests.m 中為我們自動生成了一個 Fail 的測試:

- (void)testExample
{
    STFail(@"Unit tests are not implemented yet in OCUnitProjectTests");
}

讓我們來運行 Test,看看效果:

從圖中的紅色下劃線部分可以看出,測試沒有通過,符合預期。我們只要像類 OCUnitProjectTests 一樣編寫繼承自 SenTestCase 類的子類,在其中添加形式如:- (void) testXXX(); 的測試函數既可,注意必須是一個無參無返回類型且名稱是以 test 為前綴的函數。

OCUnit 的有點是官方支持,于 XCode 集成的比較好。

GHUnit

GHUnit 是一個開源的單元測試框架,具有可視化界面,功能亦相當強大。Mark 寫了一篇 OCUnit vs GHUnit 的文章,有興趣的童鞋可以看一看。OCMock 是由 Mulle Kybernetik 為 OS X 和 iOS 平臺編寫的遵循 mock object 理念的單元測試框架。

下面來介紹如何配置 GHUnit 和 OCMock

1,首先,創建一個名為 GHUnitProject 的單視圖應用程序,注意:不要選中 Include Unit Tests 選擇框。然后運行,應該出現白屏。

2,添加新的 test target,選中左邊的工程名,點擊右側的 Add Target,新增一個名為 Tests 的 Empty Application 應用程序,讓其附屬于 GHUnitProject注意:不要選中 Include Unit Tests 選擇框。

3,向 Tests 工程中(注意是 Tests 工程)添加 GHUnitIOS Framework。首先下載與 XCode 版本對應的 GHUnitIOS Framework。英文好的可以直接查看官方 iOS 版的安裝文檔:點此查看,跳過此第 3 節;否則請接著看。

3.1,解壓 GHUnitIOS 框架到 GHUnitProject 下,讓 GHUnitIOS.framework 與 Tests 在同一目錄下。

3.2,回到 XCode,右擊工程中的 Frameworks group,選中 Add Files to...菜單,選取 GHUnitIOS.framework ,注意 targets 要選擇 Tests。

3.3,設置 Tests 的 Build Settings:在 Other Linker Flags 中增加兩個 flag: -ObjC 和 -all_load。


3.4,刪除 Tests 工程中的 UTSAppDelegate.h 和  UTSAppDelegate.m 兩個文件;

3.5,修改 Tests 工程中的 main.m 為:

#import <UIKit/UIKit.h>
#import <GHUnitIOS/GHUnitIOSAppDelegate.h>

int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([GHUnitIOSAppDelegate class]));
    }
}

3.6,選擇編譯目標 Tests>iPhone 5.0 Simulator,編譯運行,應該能得到如下效果。目前我們還沒有編寫任何實際測試,所以列表為空。

4,編寫 GHUnit 測試。向 Tests 工程中添加名為 GHUnitSampleTest 的 Objective C class。其內容如下:
GHUnitSampleTest.h

#import <GHUnitIOS/GHUnit.h> 

@interface GHUnitSampleTest: GHTestCase
{
}

@end


GHUnitSampleTest.m

#import "GHUnitSampleTest.h"

@implementation GHUnitSampleTest

- (void)testStrings
{       
    NSString *string1 = @"a string";
    GHTestLog(@"I can log to the GHUnit test console: %@", string1);
    
    // Assert string1 is not NULL, with no custom error description
    GHAssertNotNULL(string1, nil);
    
    // Assert equal objects, add custom error description
    NSString *string2 = @"a string";
    GHAssertEqualObjects(string1, string2, @"A custom error message. string1 should be equal to: %@.", string2);
}

@end

然后編譯運行,點擊 Run,效果如下:

圖中的 All 欄顯示所以的測試,Failed 欄顯示沒有通過的測試。強大吧,GHUnit。你可以向 GHUnitSampleTest 添加新的測試,比如:

- (void)testSimpleFail
{
    GHAssertTrue(NO, nil);
}

我們可以向 Tests 添加更多測試類,只要該類是繼承自 GHTestCase,且其中的測試方法都是無參無返回值且方法名字是以 test 為前綴即可。

OCMock

下面我們來添加 OCMock。

1,我們只能以靜態庫的方式來添加 OCMock。在 GHUnitTest 目錄下新建 Libraries 目錄,該目錄是與 Tests 目錄平級的。下載靜態庫文件,解壓頭文件至該目錄下。
文件下載:頭文件 libOCMock.a ,framework 文件:OCMock framework ,打開下載好的 ocmock-1.77.dmg,拷貝其中的‘Release/Library/Headers/OCMock’ 目錄至 Libraries 下。最終目錄結構如下:

2,在 GHUnitTest 工程中新建名為 Libraries 的 group,導入libOCMock.a 和目錄 OCMock,注意 target 是 Tests。

3,設置 Tests 的 Build Setting。讓 Libray Search Paths 包含 $(SRCROOT)/Libraries:

在 Header Search Paths 中增加 $(SRCROOT)/Libraries,并選中 Recursive 選擇框。

4,編寫 OCMock 測試。向 Tests 工程中添加名為 OCMockSampleTest 的 Objective C class。其內容如下:
OCMockSampleTest.h

#import <GHUnitIOS/GHUnit.h>

@interface OCMockSampleTest : GHTestCase

@end

OCMockSampleTest.m

#import "OCMockSampleTest.h"
#import <OCMock/OCMock.h>

@implementation OCMockSampleTest

// simple test to ensure building, linking, 
// and running test case works in the project
- (void)testOCMockPass
{
    id mock = [OCMockObject mockForClass:NSString.class];
    [[[mock stub] andReturn:@"mocktest"] lowercaseString];
    
    NSString *returnValue = [mock lowercaseString];
    GHAssertEqualObjects(@"mocktest", returnValue, 
                         @"Should have returned the expected string.");
}

- (void)testOCMockFail
{
    id mock = [OCMockObject mockForClass:NSString.class];
    [[[mock stub] andReturn:@"mocktest"] lowercaseString];
    
    NSString *returnValue = [mock lowercaseString];
    GHAssertEqualObjects(@"thisIsTheWrongValueToCheck", 
                         returnValue, @"Should have returned the expected string.");
}

@end

編譯運行,點擊 Run,效果如下圖。

至此,iOS 下的OCUnit,GHUnit,OCMock 單元測試介紹就到此結束了。當然還有其他一些測試框架,比如 google 出品的 GTM

原文地址:http://www.cnblogs.com/kesalin/archive/2011/12/23/cocoa_ocunit_ocmock.html

 

責任編輯:佚名 來源: 飄飄白云
相關推薦

2020-05-07 17:30:49

開發iOS技術

2017-01-14 23:42:49

單元測試框架軟件測試

2017-03-28 12:25:36

2016-03-23 10:47:55

Xcode7Swift測試

2023-07-26 08:58:45

Golang單元測試

2011-05-16 16:52:09

單元測試徹底測試

2017-01-16 12:12:29

單元測試JUnit

2017-01-14 23:26:17

單元測試JUnit測試

2011-06-14 15:56:42

單元測試

2020-08-18 08:10:02

單元測試Java

2022-05-12 09:37:03

測試JUnit開發

2017-03-23 16:02:10

Mock技術單元測試

2022-04-27 08:17:07

OCMock單元測試集成

2015-05-08 10:29:59

OCMockiOS測試

2021-05-05 11:38:40

TestNGPowerMock單元測試

2024-10-16 16:09:32

2011-07-04 18:16:42

單元測試

2011-06-14 15:39:46

單元測試

2011-07-27 13:39:28

iOS GH-Unit 單元測試

2009-09-01 10:20:06

protected方法單元測試
點贊
收藏

51CTO技術棧公眾號

不卡中文字幕av| 天天做天天摸天天爽国产一区| 国产精品三级美女白浆呻吟| 午夜国产福利一区二区| 黄色欧美在线| 色婷婷综合久久久中文一区二区| 宅男在线精品国产免费观看| 精品人妻无码一区二区| 亚洲一区成人| 日韩一区二区久久久| 一区二区免费av| 123区在线| 91天堂素人约啪| 国产精品美乳一区二区免费| 国产性一乱一性一伧一色| 精品福利久久久| 欧美变态tickle挠乳网站| 狠狠热免费视频| 黑人极品ⅴideos精品欧美棵| 久久精品视频一区二区| 91网站在线免费观看| av网站中文字幕| 欧美精品1区| 亚洲视频精品在线| 国产伦精品一区二区三区精品| 国产精品久久久久77777丨| 亚洲成a人在线观看| 一区二区三区精品国产| 精品推荐蜜桃传媒| av在线播放一区二区三区| 亚洲伊人第一页| 中文字幕1区2区3区| 久久国产一二区| 高清欧美一区二区三区| 午夜免费激情视频| 欧美国产一区二区三区激情无套| 亚洲区在线播放| 星空大象在线观看免费播放| 网站一区二区| 欧美日韩性生活| 北条麻妃视频在线| 在线成人av观看| 天天爽夜夜爽夜夜爽精品视频| 丰满人妻一区二区三区53号| 美女隐私在线观看| 国产精品久久网站| 日韩美女一区| 成年人在线观看视频| 91美女视频网站| 精品免费一区二区三区蜜桃| 国产香蕉在线观看| 国产91色综合久久免费分享| 99re国产| 亚洲精品人妻无码| 国产成人综合精品三级| 91丨九色丨国产在线| 国产婷婷在线视频| 国产福利视频一区二区三区| 超碰97在线人人| 亚洲成人777777| 99在线精品一区二区三区| 国产视色精品亚洲一区二区| 开心激情综合网| 成人avav在线| 免费精品视频一区| 国产精品一二三区视频| 国产精品午夜在线| 精品久久免费观看| 免费在线看污片| 婷婷一区二区三区| 一本久道综合色婷婷五月| 欧美福利在线播放| 欧美浪妇xxxx高跟鞋交| 欧美性猛交乱大交| 精品视频自拍| 国产亚洲激情在线| 黄色香蕉视频在线观看| 欧美日韩精品一本二本三本| 性亚洲最疯狂xxxx高清| 精品一区二区无码| 国产一区二区三区四区五区入口 | 青青草免费av| 国产婷婷精品| 国产精品自拍偷拍| www.亚洲天堂.com| 久久亚洲精品国产精品紫薇| 亚洲国产精品www| caopeng在线| 欧美午夜xxx| 中文字幕国产传媒| 91在线一区| 一区三区二区视频| 国产性70yerg老太| 秋霞成人午夜伦在线观看| av激情久久| 国产人成在线视频| 亚洲成在线观看| 中文字幕一区二区三区四区在线视频| 亚洲欧洲二区| 日韩精品中文字幕久久臀| 91狠狠综合久久久| 久久蜜桃精品| 不卡一区二区三区视频| lutube成人福利在线观看| 亚洲丶国产丶欧美一区二区三区| 黄色片在线免费| 国产精品巨作av| 日韩中文字幕在线视频| 国产精品一区二区6| 国产在线乱码一区二区三区| 欧美 日韩 国产在线| 色爱综合区网| 欧美老女人在线| 99久久久无码国产精品衣服| 欧美午夜在线| 91久久在线视频| 搞黄视频在线观看| 精品成人在线视频| 国产精品无码自拍| 偷拍欧美精品| 国产精品吴梦梦| 欧美精品久久久久久久久久丰满| 有坂深雪av一区二区精品| 深夜黄色小视频| 免费精品国产| 91精品国产精品| 亚洲精品成人电影| 亚洲欧美电影院| 激情视频免费网站| 黑人操亚洲人| 国产97在线|亚洲| 神马久久精品| 天天综合网天天综合色| 亚洲精选在线观看| 国产欧美精品aaaaaa片| 亚洲免费资源| xvideos亚洲人网站| 这里只有精品免费视频| 久久久久亚洲蜜桃| 国产黄色特级片| 欧美**字幕| 欧美最顶级的aⅴ艳星| 天天干天天草天天射| 香蕉影视欧美成人| 国产精品无码电影| 宅男噜噜噜66一区二区| 精品国产一区二区三区免费| a√中文在线观看| 亚洲国模精品私拍| 国产精品99无码一区二区| 成人免费的视频| 日韩欧美不卡在线| 日韩精品免费一区二区三区竹菊| 韩国日本不卡在线| 日本高清中文字幕二区在线| 精品久久久国产| 精品黑人一区二区三区观看时间| 亚洲综合欧美| 日本免费一区二区三区| 国产极品嫩模在线观看91精品| 日韩亚洲欧美成人| 99久久国产热无码精品免费| 亚洲激情男女视频| 欧亚乱熟女一区二区在线 | 黄色国产精品视频| blacked蜜桃精品一区| 国产专区欧美专区| 欧美性爽视频| 日韩精品中文字幕有码专区| 中文字幕手机在线视频| 国产精品国产三级国产普通话蜜臀| 国产精品视频中文字幕| 欧美黄色一区二区| 国产精品久线在线观看| 欧美 国产 精品| 精品伊人久久久| 国产成人精品电影| 天堂地址在线www| 日韩一区二区三区视频在线| 自拍偷拍欧美亚洲| 日本一区二区动态图| 日本黄色一级网站| 男女精品视频| 宅男噜噜99国产精品观看免费| 成人动漫视频| 国产精品免费在线免费| 在线播放蜜桃麻豆| 亚洲无线码在线一区观看| 国产精品一级视频| 激情懂色av一区av二区av| 欧美日韩国产一二三区| 波多野结衣中文字幕一区二区三区| 欧美性猛交久久久乱大交小说 | 国产911在线观看| 亚洲美女久久| 91视频-88av| 欧美性suv| 欧美黄色免费网站| 欧美日韩在线看片| 日韩精品视频在线观看网址| 国产一区二区三区视频免费观看| 午夜久久久久久久久久一区二区| 无码人中文字幕| 99国产一区二区三精品乱码| 亚洲一二三av| 日韩av中文字幕一区二区| 国产黄色片免费在线观看| 外国成人免费视频| 色一情一区二区三区四区| 久久精品凹凸全集| 97超碰人人模人人爽人人看| 中文.日本.精品| 欧美一区二区三区图| 亚洲夜夜综合| 91视频久久| 国产精品视频自拍| 丝袜诱惑一区二区| 欧美国产精品人人做人人爱| av在线1区2区| 亚洲片av在线| 日韩有码电影| 亚洲第一色中文字幕| 精品黑人一区二区三区国语馆| 在线观看三级视频欧美| 毛片毛片女人毛片毛片| 亚洲一区二区视频在线观看| 免费精品在线视频| 欧美国产激情一区二区三区蜜月| 亚洲色图14p| 国产不卡在线视频| 天天av天天操| 加勒比av一区二区| 亚洲天堂网2018| 麻豆精品一区二区综合av| 日本精品www| 免费日韩精品中文字幕视频在线| 欧美一级视频在线播放| 国内精品久久久久久久影视蜜臀 | 亚洲精选91| 免费网站在线观看视频 | 激情都市一区二区| 久久人人爽av| 麻豆精品在线看| 亚洲精品第三页| 精品一区二区三区免费| 久久黄色片网站| 麻豆91小视频| 三上悠亚在线一区| 国产中文字幕一区| 永久免费看片在线观看| 国产成人午夜视频| 美女搡bbb又爽又猛又黄www| 成人av中文字幕| 人体私拍套图hdxxxx| 26uuu欧美| 97人妻精品一区二区三区免| 国产成人精品亚洲777人妖| 免费在线观看日韩av| 处破女av一区二区| 日韩 中文字幕| 中文字幕+乱码+中文字幕一区| 久久久精品成人| 亚洲日本电影在线| 国产精久久久久久| 91久久精品日日躁夜夜躁欧美| 97人妻精品视频一区| 欧美挠脚心视频网站| www日本高清| 日韩精品高清在线观看| 国产视频在线看| 久久亚洲国产成人| h片在线观看视频免费| 日本a级片电影一区二区| 久久精品 人人爱| 大波视频国产精品久久| 在线看成人短视频| 夜夜爽99久久国产综合精品女不卡 | 亚洲欧美日韩国产成人综合一二三区| 亚洲mv大片欧洲mv大片| 分分操这里只有精品| 日韩经典一区二区| 欧美色图校园春色| xf在线a精品一区二区视频网站| 色欲狠狠躁天天躁无码中文字幕 | 亚洲 欧美 综合 另类 中字| 亚洲一区国产| 色呦色呦色精品| 99久久精品99国产精品| avhd101老司机| 亚洲中国最大av网站| 天干夜夜爽爽日日日日| 欧美一区二区三区思思人| 国产又爽又黄网站亚洲视频123| 中国日韩欧美久久久久久久久| 性欧美1819sex性高清大胸| 日韩av手机在线观看| 激情不卡一区二区三区视频在线| 久久久综合香蕉尹人综合网| 外国成人免费视频| av动漫免费看| 丁香激情综合五月| 免费黄色国产视频| 欧美性猛交xxxxx水多| 国产成人精品无码高潮| 亚洲天堂免费在线| 国产ktv在线视频| 91在线色戒在线| 国内精品久久久久久久久电影网 | 国产少妇在线观看| 在线国产亚洲欧美| 神马午夜精品95| 久久综合网hezyo| jizz久久久久久| 欧美xxxx黑人又粗又长密月| 国产一区日韩一区| 天天操夜夜操很很操| 国产欧美日韩亚州综合| 国产精品视频免费播放| 精品国精品国产尤物美女| 麻豆tv免费在线观看| 国产精品444| 免费成人av| 国产中文字幕免费观看| av中文字幕不卡| 国产一级一级片| 日韩欧美国产午夜精品| 蜜桃视频在线观看www社区| 国产精品色悠悠| heyzo久久| 久久久久久三级| 国产欧美日韩综合精品一区二区| 国产又大又黄又粗| 亚洲精品黄网在线观看| 91超碰国产在线| 国产伦理久久久| 亚洲三级观看| 99精品一区二区三区无码吞精| 亚洲一区国产视频| 亚洲av无码乱码在线观看性色 | 国产免费不卡| 久久久久一区二区| 欧美一级视频| 亚洲无人区码一码二码三码的含义| 一本一本久久a久久精品综合麻豆| 亚州精品国产精品乱码不99按摩| 97视频色精品| 色婷婷狠狠五月综合天色拍| 成人免费在线小视频| 久久综合色综合88| 91青青草视频| 日韩在线小视频| 成人国产精品一区二区网站| 成人短视频在线看| 国产精品99久久久久久宅男| 久久久.www| 精品免费国产一区二区三区四区| av在线网页| 欧美高清视频一区| 美洲天堂一区二卡三卡四卡视频 | 日韩一区av| 国产精品高清在线| 天天色天天射综合网| 中文字幕乱码在线人视频| 亚洲国产精品一区二区尤物区| 日本高清视频免费看| 人人澡人人澡人人看欧美| 欧美伦理影院| 亚洲一区二区图片| 偷拍亚洲欧洲综合| 国产高清免费在线播放| 91精品啪在线观看麻豆免费| 欧美私人啪啪vps| 法国伦理少妇愉情| 欧美蜜桃一区二区三区| 欧美大胆的人体xxxx| 久久综合伊人77777麻豆| 男女男精品网站| 久久av高潮av无码av喷吹| 亚洲精品国产拍免费91在线| 四虎影视4hu4虎成人| 日韩人妻精品一区二区三区| 懂色一区二区三区免费观看| 久久精品久久久久久久| 久久久av网站| 欧美日韩破处| 潘金莲激情呻吟欲求不满视频| 亚洲一区二区精品视频| 国产大片在线免费观看| 国产69精品久久久久9999apgf| 久久不射网站| 无码人妻精品一区二区三区夜夜嗨| 亚洲第一在线视频| 少妇高潮一区二区三区99| 国产午夜福利100集发布| 国产精品黄色在线观看| 日韩有码第一页| 国产日韩在线播放| 男女av一区三区二区色多| 国产女人被狂躁到高潮小说| 亚洲日韩欧美视频一区|