iphone开发之单元测试SenTestCase

使用xcode开发很长一段时间了,可是并没有使用其中支持的单元测试的功能,所以特别留意了一下使用单元测试的方式。

l  iPhoneSDK3.0开始直接支持单元测试,可以创建Unit test bundle形式的target。方便了单元测试代码的编写。

l  还有一个是用google-toolbox-for-mac中带的iPhone Unit Test 框架,其实此框架也是基于OCUnit库,但是区别是google-toolbox-for-mac添加了一部分自己的代码从而实现有限的UI测试。

Xcode中支持两种形式的单元测试:Logic TestsApplication Tests

n  其中Logic Tests主要测试程序静态的函数逻辑功能,在程序的编译(Build)阶段进行,并且只能在模拟器中使用。

n  Application Tests在程序的运行(Run)阶段进行,可以更全面的测试程序运行的一些状态功能,包括AppDelegateXibviewController等的加载和程序启动后的一些功能,并且不能在模拟器中使用而只能在真机上使用。

1:测试环境创建

添加测试target到工程

记得添加SenTestingKit.framework到测试的target中,这样才能支持测试

这是一个从SenTestCase继承的class,测试代码在里面实现。


2.编写测试函数

测试函数的结构为

- (void) test<test_case_name> {

   ...     // Set up, call test-case subject API.

   ST...   // Report pass/fail to testing framework.

   ...     // Tear down.

}

函数命名以test为前缀,并且返回值为void,不带参数。

其中Set UpTear 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里面。可以在AppTarget加上Unit Testdenpendency 这样,每次Build and Go的时候Test Cases都会运行一次,如果有错,马上会停下来,显示错误。


你可能感兴趣的:(iphone开发之单元测试SenTestCase)