iOS测试与集成工具总结

jopen 10年前

原文  http://www.infoq.com/cn/news/2015/04/ios-testing-ci

Giovanni Lodi 是来自澳大利亚的一名iOS开发者,最近他 总结 了iOS平台上单元测试、验收测试的工具,分析了它们的优缺点,以及支持iOS App的持续集成平台。

苹果官方工具

XCTest 是苹果在iOS 7和Xcode5引入的一个简单而强大的测试框架,它的测试编写起来非常简单,并且遵循 xUnit 风格。XCTest的优点是与Xcode深度集成,有专门的Test导航栏,但因为受限于官方测试API,因此功能不是很丰富。

UIAutomation 是苹果提供的UI自动化测试框架。测试使用Javascript编写,但是使用起来有些乏味。

苹果对持续集成的支持,则体现在 Xcode Bots 上。我们能配置Xcode Bots来设置触发器,来替我们运行测试或自动将代码上传到服务器上。

单元测试的开源库

在开源社区里,大家对新事物接受得很快,一些好的东西也经常病毒性的扩散。iOS开源社区也是这样,比如,它的测试编写趋势是使用xSpec风格,这是从Ruby测试库 RSpec 借鉴而来的。

Kiwi 是对XCTest的一个完整替代,使用xSpec风格编写测试。Kiwi带有自己的一套工具集,包括 expectationsmocksstubs ,甚至还支持 异步测试

Specta 与Kiwi功能相似,但在架构上非常不同。Kiwi注重功能的整合,而Specta则注重模块化。它本身只专注于运行测试,而将模拟、匹配等功能交给第三方。下面这些一些开源测试组件,它们能与Specta和Kiwi框架搭配使用:

  • Expecta :匹配程序框架。
  • OCHamcrest :匹配程序框架。
  • OCMock :模拟测试框架。
  • OCMockito :模拟测试框架。
  • OHTTPStubs :模拟网络请求的库,基于block的语法来匹配URL。
  • Nocilla :模拟网络请求的库,使用链式API。

Quick 是一个使用Swift开发的新测试框架,对测试使用Swift编写的App非常友好。它还有一个 Nimble 库用于编写匹配模式。

验收测试的开源库

KIF (Keep It Functional)是用Objective-C编写的用户界面测试框架。KIF tester使用了私有API来了解App中的视图层级。缺点是运行较慢。

Subliminal 是另一款与XCTest集成的框架。与KIF不同的是,它基于UIAutomation编写,旨在对开发者隐藏UIAutomation中一些复杂的细节。不过它最后更新日期是2014年2月,可能已停止更新。

Calabash 是跨平台开发工具Xamarin推出的一款测试工具。它使用BDD风格来编写验收测试。它的优点是支持跨平台(需使用不同的库),声明式的测试风格非常易于读写。缺点是不够稳定并且运行速度慢。

持续集成平台

这里列出的持续集成工具都是基于云平台的,因为自己搭建类似 Jenkins 这样的持续集成环境代价高昂。

下面的列表是目前支持iOS的主流CI平台。

它们间的不同在于价格、配置工作,以及上手难易程度。