[iOS单元测试系列]单元测试框架选型

XCTest Or GHUnit

写测试用例总得有个框架吧,现在比较流行的就属Apple自带的XCTest和第三方的GHUnit。我们来看看他两之间的区别。 XCTest:与Xcode深度集成。而且可以享受Apple后续对XCTest升级的福利。 GHUnit:集成度不如XCTest,安装麻烦。但是有自己的GUI界面。 貌似都各有所长,那么我们来看看Github上的一些知名的开源库都用的是什么测试框架吧。

可以看到清一色的被XCTest刷屏了。也的确,GHUnit的GUI界面对我们来说没有什么特别大的意义。而XCTest血统纯正,背后站着东家Apple。而对于我们的选择也应该是XCTest,应该既然Github上又这么多XCTest的case例子可以参考,对我们的帮助肯定不言而喻。

OCMock Or OCMockito

这两个都是用来mock对象,stub方法的。OCMock 和 OCMockito个人感觉功能区别不大。他们之间的区别在于使用OCMock的库比OCMockito的库多,而且文档和教程更加丰富。大家可以打开OCMock官网看一下。所以个人选择我选了OCMock作为我们的测试mock工具。

Expecta Or OCHamcrest

ExpectaOCHamcrest这两个都是断言的扩展框架。一开始我选择了Expecta,因为我后来有一段时间将测试文件用BDD框架Specta来写(当然这是后话),而Expecta 和Specta都出自同一个人之手,不论是教程文档都更加丰富。但是后来我废弃了BDD框架,还是用原生的XCTest,Expecta在使用中也遇到了一些问题,我就把我们的断言框架由Expecta切换到了OCHamcrest。

原因有两点:

比如OCHamcrest不支持superClass验证,我们必须自己去比较,返回一个bool值,然后去判断bool是否为真。很麻烦。自己自定义个superClass的验证,就不需要每次都这么麻烦的写这么多代码了。而如果Expecta不支持的断言,那就永远不能支持了。 我们可以通过OCHamcrest这个特性,做一些符合自己app场景的特有断言。

BDD Or Not

BDD的全称是Behavior Driven Development。也就是行为驱动开发。BDD确实让我眼前一亮。他能将测试语言写成类似自然语言。BDD的理念是你不是在写代码,而是在讲故事。而整个故事是由Given…When…Then组成。我们可以来看看BDD框架Kiwi的一段测试代码:

这个测试用例就是在说Given a Team,When newly created,it should have a name, and should have 11 players。 的确很清晰,基本不需要注释就能知道在干嘛了。 既然BDD这么好,那么我们比较下BDD框架Kiwi和XCTest + OCMock组合的优劣吧。为什么是XCTest + OCMock而不是XCTest,因为Kiwi自带mock功能,而XCTest没有mock功能。

可以看出Kiwi还是蛮诱人的。但是Kiwi的mock功能api远没有OCMock设计的好,尤其是OCMock3推出后,所以笔者想把Kiwi和OCMock一起用,结果这两个库存在不兼容性。一跑就挂。后来迁移到BDD另一个框架Specta,BDD的理念相同,所以语法也大同小异。Specta和Kiwi的区别就是Kiwi包含了Specta和OCmock以及Expeata所有的功能。换句话说Specta就是没有mock和验证功能的kiwi。但是想对来说,specta的API设计更加合理。

但是,高潮来了!后续我还是废弃了BDD,切换回XCTest,原因有很多。主要的原因是BDD框架hold不住业务的发展,BDD的讲故事理念在业务面前就是老太太的裹脚布,又臭又长!而且BDD需要一定的学习成本,不像XCTest这种类JUnit的对开发者更友好的代码。而且BDD的框架包装过深,可扩展性不高。还有就是BDD的框架普遍太年轻,bug相对较多,版本迭代太快。最最致命的是BDD的框架不能单个case单个跑,一跑所有的case全部跑一边这在平时写case 的时候是非常拖沓的!

总结

也没啥好总结的。一个个坑踩下来,最后的选择是XCTest + OCMock + OCHamcrest是我认为最好的框架方案。当然,这是我的个人观点~

原文:http://ios.jobbole.com/81961/?utm_source=blog.jobbole.com&utm_medium=relatedPosts


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
择适合的自动化测试框架需要考虑多个因素,包括项目需求、技术栈、团队经验等。以下是一些常见的自动化测试框架供您参考: 1. Selenium:Selenium是一个广泛使用的Web应用程序测试框架,支持多种编程语言,如Java、Python、C#等。它可以模拟用户在浏览器中的操作,实现自动化测试。 2. Appium:Appium是一个用于移动应用程序测试的开源框架,支持iOS和Android平台。它可以通过模拟用户在移动设备上的操作来进行自动化测试。 3. Robot Framework:Robot Framework是一个通用的自动化测试框架,支持关键字驱动和数据驱动的测试方法。它具有易读易写的语法,并且可以与多种测试工具和库集成。 4. JUnit/TestNG:JUnit和TestNG是Java领域最常用的单元测试框架,它们提供了丰富的断言和测试注解,可以方便地编写和执行单元测试。 5. Pytest:Pytest是Python中一种简单而强大的测试框架,它支持自动发现测试用例、参数化测试、夹具等功能,并且与其他Python库和工具集成良好。 6. Cypress:Cypress是一个现代化的前端自动化测试框架,它可以直接在浏览器中运行测试,并提供了丰富的API和断言,使得编写和执行测试变得简单高效。 择适合的自动化测试框架需要根据具体项目需求和技术栈来决定。您可以考虑以下问题来帮助择: - 需要测试的应用类是Web应用还是移动应用? - 项目使用的编程语言是什么? - 是否需要支持并发执行测试用例? - 是否需要支持分布式测试? - 是否需要与其他工具或框架集成?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值