iOS单元测试SenTest
环境:Xcode 4.2
1、创建单元测试的target
选择工程,点击Add Target,添加ios-Other下的Cocoa Touch Unit Testing Bundle类型target(图1)。(网上一些资料说,target后缀必须是Tests,但实际测试同名字无关系,可能是Xcode版本原因),完成后如图2。
图1
图2
此时工程目录下会多一个TestFuc文件夹,文件夹结构如下图3,TestFuc类是一个测试用例类SenTestCase的一个实例:
图3
2、添加SenTestingKit.framework
选中测试的Target,本项目中即TestFuc,查看Build Phases选项卡下的Link Binary With Libraries,会发现项目中缺少对SenTestingKit.framework库的引用,将其添加。
3、运行TestFuc测试
在Scheme中选择TestFuc,生成时一定要选择Test,如果选择Run,则会出现“The scheme 'TestFuc' is not configured for Running”的错误。
成功运行后,发现输出错误,错误信息如下:
TestFuc.m:29: error: -[TestFuc testExample] : Unit tests are not implemented yet in TestFuc
Test Case '-[TestFuc testExample]' failed (0.000 seconds).
打开TestFuc.m,会发现在TestFuc类的实现文件中默认添加了一个测试函数testExample,并添加一个执行失败的提示,如下:
- (void)testExample{
STFail(@"Unit tests are not implemented yet in TestFuc");
}
看到这个错误,整个测试的准备工作已经完成,接下来就可以在测试用例的类实例中添加测试函数,测试函数的名称就不能随意了,必须以test为前缀。在测试文件夹中还可以添加多个测试用例进行测试。
4、添加测试对象类,进行测试
完成步骤3后,可以开始对项目中具体的类进行方法测试。除了在相应的测试用例中添加该类的引用外,首先得将这个类引用加入该测试的Target(很2地因为这个问题卡了许久),在本项目里即为TestFuc。添加引用的方式是,点击测试target(TestFuc),选择面板Build Phases,打开Compile Sources,选中项目中要测试类的.m实现文件将其拖入Compile Sources就ok。否则会产生如下error:
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_测试类名", referenced from:
objc-class-ref in TestFuc.o
ld: symbol(s) not found for architecture i386
如果测试的类存在nib文件则,需要将nib文件拖入Build Phases--Copy Bundle Resources中。
PS:测试初探,错误的地方或者需要补充的地方请提示~~目前的感觉是花了多余的力气,只为了测试几条静态函数和界面属性。。直接在项目中单步调试,可能更快点。。