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