工欲善其事,必先利其器。
选取一套优秀的白盒测试框架组合,无论对于我们的白盒测试效率还是质量,都有很大的帮助。那么我们应该怎样选取呢?这里编者简单对当下比较流行的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白盒测试的搭配之一。
