测试

1.流行框架

Apple自带的XCTest和第三方的GHUnit.他两之间的区别:XCTest:与Xcode深度集成。而且可以享受Apple后续对XCTest升级的福利。 GHUnit:集成度不如XCTest,安装麻烦。但是有自己的GUI界面。因为XCTest是苹果的,所以我们选择XCTest

2.OCMock

mock测试是个很神奇而又很酷的技术,在测试过程中,对于一些不容易构造或不容易获取的对象,此时你可以创建一个虚拟的对象(mock object)来完成测试。
而我们在进行iOS测试时候是使用OCMock来进行对象的mock

3.断言框架

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

1.Expecta不成熟,至笔者切换的时候才0.3.1版本,遇到很多框架自身的问题。case跑着跑着验证通不过了,再跑一次又过了,是不是还爆出个Expecta框架内部的crash。
2.OCHamcrest更加成熟,而且可扩展性高,可以自定义自己的断言,更灵活。

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

BDD Or Not

BDD和TDD都是敏捷开发的技术;
BDD(Behavior Driven Development),也就是行为驱动开发,它旨在解决具体问题,帮助开发人员确定应该测试些什么.此外,它提供了一个 DSL(译者注: Domain-specific language,域特定语言)鼓励开发者弄清楚他们的需求,并且它引入了一个通用语言帮助你轻易理解测试的目的。
TDD(Test-Driven Development),就是测试驱动开发,通过测试来推动整个开发的进行
目前使用比较多得是BDD框架:
Cedar,Specta和Kiwi这3个框架就是目前Objc最流行的BDD测试框架
Specta和Kiwi的区别就是Kiwi包含了Specta和OCmock以及Expeata所有的功能
除此之外还有Apple的XCTest:XCTest与Xcode深度集成,而且可以享受Apple后续对XCTest升级的福利

XCTest 的优势和缺点都是由于它太简单了。你只需要创建一个类,使用 “test” 作为测试方法名的前缀,只需要这样就可以了,不需要再做其他的。和 Xcode 很好的集成性也是 XCTest 获得青睐的原因。你可以点击边栏上的小菱形按钮来运行测试用例,你也可以很容易的查看所有失败的测试用例,也可以在测试用例列表中点击某一行而快速的跳转到某一个测试用例。

不幸的是,这已经是 XCTest 的全部优点了。在开发和测试中,使用 XCTest 时我们没有碰到任何的障碍,但是经常会想如果它能更方便一些就好了。XCTest 类看起来就像普通的类,而一个 BDD 测试套件的结构和其嵌套的上下文是显而易见的。并且这种为测试创建嵌套上下文的可能性也是最缺失的。嵌套的上下文允许我们在使独立的测试相对简单的情况下创建越来越具体的场景。当然,在 XCTest 中这也是可以的,比如在一些测试用例中调用自定义的 setup 方法,但这并不方便。

BDD 框架的附加功能的重要性是取决于项目的大小。我们的结论是,XCTest 对中小型的工程来说是一个很好的选择,但是对于更大型的工程,就有必要参考一下像 Kiwi 或者 Specta 这样的 BDD 框架。

4.UITests

通过代码化来实现自动点击界面,输入文字等功能