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带有自己的一套工具集,包括 expectations 、 mocks 、 stubs ,甚至还支持 异步测试 。
Specta 与Kiwi功能相似,但在架构上非常不同。Kiwi注重功能的整合,而Specta则注重模块化。它本身只专注于运行测试,而将模拟、匹配等功能交给第三方。下面这些一些开源测试组件,它们能与Specta和Kiwi框架搭配使用:
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平台。
它们间的不同在于价格、配置工作,以及上手难易程度。
当然,这篇文章提到的工具并不是全部,如果你对iOS的测试和集成感兴趣,可以到 这里 留言和作者交流。