在Xcode的iPhone项目中使用单元测试
en: http://developer.apple.com/mac/articles/tools/unittestingwithxcode3.html
教程 : http://6tringle.com/blog/
完美的软件来自专业乃至苛刻的测试,提醒一下自己逐渐提高对自己的要求。分享一下在Xcode的iPhone项目中做单元测试的方法。iPhone SDK 2.2 开始支持使用 SenTestingKit.framework进行单元测试
第一步,新建UnitTest Target
鼠标右键点Target,Add->NewTarget
选择Cocoa Unit Test Bundle
第二步,配置 UnitTest Target
( Mac OS X 项目跳过此项,iPhone only )
因为iPhone上没有Cocoa.h, 因此删除相关的配置
1. 双击 UnitTest Target, 打开target的属性"Build'页,删除所有的User-Defined项,以及Other Linker Flags
2. 切换到 "General" 页,添加两个Foundation.framework和SenTestingKit.framework到Unit Test Target
第三步,新建Test Cases
1. 把 /Developer/Library/SenTestingKit.framework 加入项目
2. 新建 Objective C test case classes
这是一个从SenTestCase继承的class,假设新建的文件是 MyTests.h MyTests.m, 把MyTests.m修改成如下
#import "MyTest.h"
#if !TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR
@implementation MyTest
- (void)testFooBar {
STAssertEquals (1 + 1, 2, @"");
STAssertEquals (1 + 1, 3, @""); //明显的Test Cases错误 2<>3
}
@end
#endif
注意:如果非iPhone项目,可以不需要那个 #if 的宏,这段宏是确保 在非iPhone Simulator 的环境下 Test Cases无效,SenTestingKit.framework暂时不支持device
深入的Test Cases的写法参见这里
第四步,运行Test Cases
准确的说Test Cases不需要运行,编译的时候就运行了。尝试 Build Unit Test Target, 你会直接得到一个错误,就像编译错误一样显示在Xcode里面。
因为实际上Build target的过程就运行了SenTestngKit的脚本。
为了日常使用方便,可以在App的Target加上Unit Test的denpendency, 这样,每次Build and Go的时候Test Cases都会运行一次,如果有错,马上会停下来,显示错误。
That's all. 更多关于Test Cases写法的资料请在网上搜索OCunit
认真写好Test Cases对于项目长期的维护有难以估量的价值。