iphone开发之单元测试SenTestCase
使用xcode开发很长一段时间了,可是并没有使用其中支持的单元测试的功能,所以特别留意了一下使用单元测试的方式。
l iPhone从SDK3.0开始直接支持单元测试,可以创建Unit test bundle形式的target。方便了单元测试代码的编写。
l 还有一个是用google-toolbox-for-mac中带的iPhone Unit Test 框架,其实此框架也是基于OCUnit库,但是区别是google-toolbox-for-mac添加了一部分自己的代码从而实现有限的UI测试。
在Xcode中支持两种形式的单元测试:Logic Tests和Application Tests。
n 其中Logic Tests主要测试程序静态的函数逻辑功能,在程序的编译(Build)阶段进行,并且只能在模拟器中使用。
n 而Application Tests在程序的运行(Run)阶段进行,可以更全面的测试程序运行的一些状态功能,包括AppDelegate,Xib和viewController等的加载和程序启动后的一些功能,并且不能在模拟器中使用而只能在真机上使用。
1:测试环境创建
添加测试target到工程
记得添加SenTestingKit.framework到测试的target中,这样才能支持测试
这是一个从SenTestCase继承的class,测试代码在里面实现。
2.编写测试函数
测试函数的结构为
- (void) test
... // Set up, call test-case subject API.
ST... // Report pass/fail to testing framework.
... // Tear down.
}
函数命名以test为前缀,并且返回值为void,不带参数。
其中Set Up和Tear down可以单独拿出来写两个函数
- (void) setUp {
test_subject = [[MyClass new] retain];
STAssertNotNil(test_subject, @"Could not create test subject.");
}
- (void) tearDown {
[test_subject release];
}
这样在调用测试函数之前会自动调用setUp 函数,之后会自动调用tearDown 函数。当然,如何写出好的测试代码,这个还需要进一步的学习。
准确的说Test Cases不需要运行,编译的时候就运行了。尝试 Build Unit Test Target, 你会直接得到一个错误,就像编译错误一样显示在Xcode里面。可以在App的Target加上Unit Test的denpendency, 这样,每次Build and Go的时候Test Cases都会运行一次,如果有错,马上会停下来,显示错误。