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 框架搭配使用:
- 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 平台。
它们间的不同在于价格、配置工作,以及上手难易程度。
当然,这篇文章提到的工具并不是全部,如果你对 iOS 的测试和集成感兴趣,可以到这里留言和作者交流。
评论