创建iOS单元测试

来源:互联网 发布:恢复数据多少钱 编辑:程序博客网 时间:2024/04/25 16:33

环境: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库的引用,将其添加。

      图4  

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