- 浏览: 569468 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
JYY282:
[i][/i]
Ecshop与Shopex的比较 -
qq247890212:
我也遇见这问题了,真诡异。重新下载个猫换了就好了。 太浪费时间 ...
诡异:ClassNotFoundException: org.springframework.web.filter.CharacterEncoding
From: http://mobile.51cto.com/iphone-337270.htm
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
发表评论
-
Objective-C 与 C++ 的异同
2013-04-02 12:03 1355http://www.cnblogs.com/y041039 ... -
Cocos2D-X是全球知名的开源跨平台手机游戏引擎
2013-01-22 10:05 2707http://www.oschina.net/p/cocos ... -
iOS Keyboard 键盘高度变化 自适应
2013-01-15 15:43 3216[[NSNotificationCenter default ... -
iOS使用自定义字体
2012-11-27 12:11 12074From: http://blog.csdn.net/csy1 ... -
4 款类似 Facebook/Path 切换效果的 iOS 组件
2012-11-27 12:03 2086From: http://blog.csdn.net/lia ... -
Path 2.0的UI界面设计详细介绍
2012-11-27 11:56 1424如Path的创始人Dave Morin ... -
史上最全的App Store邮箱列表
2012-11-27 11:51 1215From: http://roybaby.blog.51cto ... -
iOS从info.plist 获取项目的名称及版本号
2012-11-16 10:54 1572From: http://blog.sina.com.cn/s ... -
MapKit annotation drag and drop with callout info update
2012-10-13 10:38 2361http://hollowout.blogspot ... -
NSArray 或NSDictionary 调用writeToFile方法失败原因
2012-08-31 10:03 4421NSArray 或NSDictionary 调用writeTo ... -
如何让IOS应用从容地崩溃
2012-08-30 15:25 1569From: http://www.cocoachina.com ... -
iOS中判断设备系统版本
2012-08-29 17:17 31668在iOS开发中,经常要考虑系统的向下兼容,如果使用 ... -
iOS 汉字转拼音
2012-08-21 16:42 1421From: http://www.cnblogs.com/v2 ... -
iOS模拟器截图工具
2012-08-17 16:35 1580From: http://magicalboy.com/ios ... -
AFNetworking
2012-08-08 10:54 4618AFNetworking on github: https:/ ... -
Wrapping Conventions
2012-08-01 15:54 778Wrapping Conventions ... -
Core Animation如何使显式动画结束时的值直接作用Layer
2012-08-01 14:51 3745(1)使用隐式动画会直接改变layer的属性值,如: ima ... -
How To Debug Memory Leaks with XCode and Instruments Tutoria
2012-07-31 16:30 1016From: http://www.raywenderlich. ... -
Using Properties in Objective-C Tutorial
2012-07-31 16:27 877From: http://www.raywenderlich. ... -
appstore 收款: 如何绑定收款的银行卡?
2012-07-27 09:07 9367From: http://www.oschina.net/qu ...
相关推荐
xcode开发,单元测试用例Demo,有帮助
在本篇中,我们将向您全面细致地介绍基于iOS平台进行单元测试和UI测试的完整过程及相关技巧。编写测试可不是一项迷人的工作;然而,由于测试可以避免使你的宝贝应用程序变成一块充斥错误的大垃圾场,所以编写测试又是...
单元测试就是对这些小的功能或者函数进行测试,良好的单元测试会让代码的健壮性提高很多。XCTest就是XCode为我们提供的一个框架,它提供了各个层次的测试。每个XCode创建ios的工程中都有一个叫做”工程名Tests”的...
导读:本文不讨论单元测试是什么,或者它之于一个工程的利弊,我认为单元测试是一个开发者...本文对比两个iOS开发中常见的单元测试框架:OCUnit,被官方集成进XCode 4.x版本中;GHUnit,被推荐最多的测试框架,带GUI
默认情况下,它意味着在测试失败时引发异常,因此您可以使用异常断点并在失败点在 Xcode 中进行调试。 安装 安装 GRUnit gem 这个 gem 使设置测试应用程序目标变得容易。 $ gem install grunit 安装测试目标 这将...
Xcover 从Xcode单元测试覆盖率统计信息生成HTML页面先决条件 安装将此行添加到您的应用程序的Gemfile中: gem 'xcover' , git : 'https://github.com/nimbl3/xcover' 然后执行: $ bundle或将其自己安装为: $ gem ...
该项目还包括单元测试和UI测试。 要在本地运行所有测试,请从“产品”菜单中选择“测试”或按⌘U。 设置代码签名 在真实设备或Semaphore上运行示例应用程序之前,您需要配置代码签名。 首先,您将需要配置Xcode...
本文说下如何通过Xcode5中集成的XCTest框架进行简单的单元测试。在计算机编程中,单元测试(又称为模块测试,UnitTesting)是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。程序单元是应用的最小可...
Xcode中自带的一个单元测试框架,可以在您写完代码后写好测试用例,点击测试按钮,测试框架在编译时将为你执行完测试工作。
MVVM 是一个用 Swift 语言开发的 iOS 应用程序,用于演示如何在 iOS 项目中应用 MVVM 以及如何使用 Xcode6 内部构建工具在 Swift 中执行单元测试。 通知 当前版本可以在 Xcode 6.1 中编译。 使用的功能 Swift 编程...
Xcode 单元测试需要运行 iPhone/iOS 模拟器,并且 xcodebuild 测试必须在 GUI 上下文中通过登录用户运行。 集成到通过 SSH 执行命令的自动化系统中真的很痛苦。 解决方案 您必须从 GUI 中的登录用户(例如:从终端...
其目标是证明软件能够正常运行,而不是发现bug(发现bug这一目的与开发成本是正相关的,虽 开始之前 本文侧重讲述如何在iOS程序的开发过程中使用单元测试。使用Xcode自带的OCUnit作为测试框架。 一、单元测试...