OCUnit
OCUnit是Xcode 4.x集成的单元测试框架,OCUnit中的测试分为两类,一类称为Logic Tests,另一类称为Application Tests。Logic Tests更倾向于所谓的白盒测试,用于测试工程中较细节的逻辑;Application Tests更倾向于黑盒测试,或接口测试,用于测试直接与用户交互的接口。
·添加单元测试
OCUnit是Xcode集成的,所以其与工程结合理应是最好的。添加到工程中的成本也理应最低。使用XCode创建新工程的流程中就有一个Include Unit Tests
的选项,新的工程就会自动生成一个Logic Tests。
向已经存在的工程中添加OCUnit Logic Tests也不复杂,只需要添加一个类型为:
Cocoa Touch Unit Testing Bundle
的Target即可。向已有的额工程中添加一个测试Target时,XCode会自动生成一个Scheme,运行单元测试用例和Build原工程需要切换不同的Scheme。如果认为切换Scheme非常麻烦,也可在添加Target之前,在
Manage Scheme
菜单中取消Autocreate schemes
。·创建测试用例
OCUnit的测试用例最常用的方法有三个
1.- (void)setUp:每个test方法执行前调用
2.- (void)tearDown:每个test方法执行后调用
3.- (void)testXXX:命名为XXX的测试方法
添加Target之时XCode已经自动创建了一个测试用例:UITestDemoTests,其中UnitTestDemo是工程的名字,该类中已经包含了setUp,tearDown和testExample三个方法
通过command+n,选择Objective-C test case class
创建一个新的测试用例。通过Xcode创建的测试用例类死一个继承自SenTestCase(OCUnit由SEN:TE公司开发,因此基类命名为SenTestCase)的空类,需要模仿UnitTestDemoTests编写测试方法。
开发者可以自己实现无返回值,且命名规则为testXXX的实例方法,并且使用框架提供的大量断言方法。
LogicTests与Application Tests的区别主要在setUp方法,Logic Tests只需在setUp方法中初始化一些测试数据,而Application Tests需要在setUp方法中获取主应用的AppDelegate,供test方法调用。
值得注意的是,OCUnit的test bundle是侵入主应用的,因此在使用过程中要十分注意,不要让单元测试的资源,造成诡异的Bug。
·运行测试
由于OCunit是集成在Xcode中的框架,因此在Xcode中运行也比较方便。切换到单元测试的scheme(如与工程公用的scheme则无需切换),Product->Test(或直接使用快捷键Command+U),框架会自动查找所有工程中SenTestCase的子类,运行其中全部命名类似testXXX的无返回值方法。
·测试反馈
OCUnit的失败方法会通过Console和Xcode Issues两个位置反馈,通过Xcode Issues可以直接定位到出现错误的单元测试代码行。Issue的提示信息就是在单元测试断言方法中定义的description。