工欲善其事,必先利其器。
选取一套优秀的白盒测试框架组合,无论对于我们的白盒测试效率还是质量,都有很大的帮助。那么我们应该怎样选取呢?这里编者简单对当下比较流行的iOS单元+集成测试框架进行对比,并介绍一种个人感觉很优秀的测试框架的搭配。
现在比较流行的就属Apple自带的XCTest、第三方的GHUnit以及BDD类型的框架如:Kiwi等,那么他们各有什么优缺点呢?
XCTest:我们之前的文章详细介绍过这个框架。它的优/缺点主要有以下几种:
优点:
-
与Xcode深度集成,环境搭建极其简单。
-
学习资料、文档较多。
-
框架非常稳定,不会出现意外的崩溃情况。
-
测试代码可读性不如BDD框架。
-
原生框架的功能比较少,需要搭配OCMock等框架使用。
缺点:
GHUnit:
-
集成度不如XCTest,安装麻烦。
-
有自己的GUI界面(对单元测试来讲,GUI界面其实没多大用)
-
XCTest框架的缺点它基本都有。
BDD框架Kiwi:
优点:
-
将测试语言写成类似自然语言,测试代码可读性较高。
-
框架中包含mock和expecta断言框架的全部功能。
缺点:
-
与XCTest框架相比,不够稳定,bug较多。
-
安装较复杂,学习资料少。
-
不能单条case执行。
考虑到与Xcode集成度、框架易用性、框架稳定性、可扩展性等因素,我们最终选择了Apple自带的XCTest框架。
由于上面我们选择了XCTest这个单元测试框架,势必要为其搭配一个支持mock功能的框架。在这里我们使用的是OCMock这款mock框架,主要考虑到以下几点:
-
OCMock环境搭建简单,与XCTest兼容较好
-
OCMock的API较多且相对友好,功能丰富。
-
OCMock教程丰富且版本迭代很快。
详细的教程可参考:
http://www.ocmock.org/
其实对于XCTest这个框架,在Xcode6添加支持异步测试的API后,断言方法已经非常丰富了,基本可以满足我们的测试需求。如果还要对其进行扩展的话,推荐OCHamcrest这款框架,它的扩展性较好,且与XCTest兼容度很高。
这里说到集成测试框架,其实是在单元测试框架基础上,加入了一些模拟用户操作的API,我们在这里选择的是KIF这款框架,具体的环境搭建可参考:https://github.com/kif-framework/KIF,这个框架功能丰富,由于开源扩展性较高,我们可以自己添加一些API。
我们在项目中使用的是:
XCTest+OCMock+OChamcrest+KIF
的组合,个人感觉这几款框架的组合是最适合iOS白盒测试的搭配之一。