FBSnapshotTestCase 版本 2.1.4

FBSnapshotTestCase 版本 2.1.4

测试已测试
Lang语言 Obj-CObjective C
许可证 BSD
发布最新发布2016年10月

dstnbrkrDustin BarkerPatrik Tomas ChameloFacebook, Inc.维护。



FBSnapshotTestCase 版本 2.1.4

  • Facebook

它做什么

“快照测试用例”抓取一个配置好的 UIViewCALayer,并使用 renderInContext: 方法获取其内容的一个图像快照。它将此快照与存储在您源代码仓库中的“参考图像”进行比较,如果不匹配则使测试失败。

为什么?

在 Facebook,我们编写了很多 UI 代码。您可以想象,每种类型的信息流都是使用 UIView 的子类渲染的。有很多边缘情况我们需要正确处理。

  • 如果可用空间内无法放下所有文本怎么办?
  • 如果图像的大小与图像视图不匹配怎么办?
  • 高亮状态应该是什么样子?

逻辑代码很容易测试,但测试视图就不是那么明显了。您可以做很多矩形断言,但这些很难理解或可视化。查看图像差异显示您可以确切看到发生了什么变化,以及用户将如何看到。

我们开发了 FBSnapshotTestCase 来使快照测试变得简单。

创建快照测试

  1. 继承 FBSnapshotTestCase 而不是 XCTestCase
  2. 在您的测试中,使用 FBSnapshotVerifyView
  3. 在测试的 -setUp 方法中将 self.recordMode = YES; 运行一次测试。(这将在磁盘中创建参考图像。)
  4. 移除启用记录模式的行并运行测试。

特性

  • 根据测试类和选择器自动在磁盘上命名参考图像。
  • 在失败时向控制台打印描述性的错误消息。(奖励:失败消息中包含了一条命令,如果您已安装 Kaleidoscope,就可以查看图像差异。)
  • 如果您希望在单个测试方法中进行多个快照,可以提供一个可选的“标识符”。
  • 通过 FBSnapshotVerifyLayer 支持对 CALayer 的支持。
  • 使用 usesDrawViewHierarchyInRect 处理像 UIVisualEffectUIAppearance 和大小类这样的情况。
  • 使用 isDeviceAgnostic 允许将设备型号(iPhone、iPad、iPod Touch 等)、操作系统版本和屏幕尺寸附加到图像(允许为不同的操作系统和设备拥有相同的“快照”的多个测试)。

注意

您的单元测试必须是“应用测试”,而不是“逻辑测试”。(也就是说,必须在模拟器中运行,以便它能够访问UIKit。)在Xcode 5及以后的版本中,新项目只提供应用测试,但旧项目将为两种类型提供独立的目标。

作者

FBSnapshotTestCase 是由 Facebook 的 Jonathan Dann 编写的,由 Todd Krabach 做出重大贡献。

许可证

FBSnapshotTestCase 采用 BSD 许可证。请参阅 LICENSE 文件。