代码库> 其他> FBSnapshotTestCase——Facebook测试UI用例
FBSnapshotTestCase——Facebook测试UI用例
关注
上传者:ccsupport 分类:其他(Others)
查看次数:7142 下载次数:211
上传时间:2013-10-18 大小:28 B
它有什么用
这个快照测试用例通过renderInContext方法来获取配置的UIView或者CALayer的图片快照。它会将这个快照和之前存在源代码库中的参考图片做对比,如果两个图片不匹配的话,测试就会失败。

为什么要使用它
在Facebook我们会写很多的UI代码。你也许可以想象的到,facebook上发出的每个feed story都会使用一个UIView的子类。类似以下的很多UI细节我们都希望能够精确的处理:


1.如果输入框中的文本内容框超过了输入框的大小,怎么办?
2.如果一个图片的大小和image view的大小不符合,怎么办?
3.高亮状态该是什么样子?

测试代码的逻辑很直观简单,但是测试view的话就不是很直观了。你可以做很多的矩形断言(assets),但是它很难理解,想象出它的样子。但是通过比较两张图片我们可以很直观的知道改变了什么,它呈现给用户会什么样子。

所以,我们开发了FBSnapshotTestCase 来让快照测试变得容易。

创建一个快照测试
1.把FBSnapshotTestCase以及FBTestSnapshotController 源文件拖拽到工程中。在Add Files窗口中,请确保勾选的是tests target。


2.在GCC_PREPROCESSOR_DEFINITIONS中定义FB_REFERENCE_IMAGE_DIR 。它会指向你希望储存参考图片的位置。在Facebook,我们通常这么用:
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) FB_REFERENCE_IMAGE_DIR=""$(SOURCE_ROOT)/$(PROJECT_NAME)Tests/ReferenceImages""

3.子类化FBSnapshotTestCase 而不是子类化XCTestCase。

4.在测试中,使用FBSnapshotVerifyView

5.把测试中的-setUp设置self.recordMode = YES;然后运行测试。(这样会在硬盘中创建参考图片。

6.删除打开record mode的线,然后运行测试。

特点
根据测试的类以及selector自动给硬盘上的参考图片命名。


失败的话则会打印错误信息给控制台。(如果你安装了Kaleidoscope的话打印的错误信息中会包括一行命令,可以查看两张图片之间的差异)。

如果你在一个测试方法中希望有多张快照的话提供了一个选项“identifier。

通过FBSnapshotVerifyLayer可支持CALayer。

注意
你的单元测试必须是一个“application test”,不能是“logic test”。(也就是说,测试必须在模拟器中运行,这样的话它才能获取UIKit的数据。)Xcode 5的新工程只提供application test,但是如果是老的工程的话两种类型的测试都能进行。

作者: Jonathan Dann   https://facebook.com/j.p.dann
由Todd Krabach提供。


下载:

收藏
我来说两句
发表评论
您还没有登录!请登录注册
所有评论(0
提示
sina weixin mail 回到顶部