iOSSnapshotTestCase 8.0.0

iOSSnapshotTestCase 8.0.0

UberAlan Zeino 维护。



  • Uber

iOSSnapshotTestCase(之前为 FBSnapshotTestCase

Build Status CocoaPods Compatible Carthage compatible Swift Package Manager

它做什么

“快照测试用例”会获取一个配置的 UIViewCALayer 并使用必要的 UIKit 或 Core Animation 方法生成其内容的图像快照。它将该快照与存储在您的源代码仓库中的“参考图像”进行比较,如果这两个图像不匹配,则测试失败。

为什么?

我们编写了很多 UI 代码。在我们创建 UIView 实例时,有很多边缘情况我们想要处理。

  • 如果有比可用空间更多的文本该如何处理?
  • 如果图像不匹配图像视图的大小怎么办?
  • 高亮状态应该是什么样子?

逻辑代码的测试比较直接,但如何测试视图则不太明显。您可以进行很多矩形断言,但这些难以理解或可视化。观察图像差异可以看到确切的变化以及它将以什么方式呈现给用户。

开发 iOSSnapshotTestCase 的目的是使快照测试变得容易。

安装

步骤 1: 将 iOSSnapshotTestCase 添加到你的项目中

CocoaPods

将以下代码行添加到你的 Podfile 中

target "Tests" do
  use_frameworks!
  pod 'iOSSnapshotTestCase'
end

如果你的测试目标是仅Objective-C,请使用 iOSSnapshotTestCase/Core 替代,它不包括 Swift 支持。

Carthage

将以下行添加到你的 Cartfile 中

github "uber/ios-snapshot-test-case" ~> 6.1.0

Swift 包管理器

将以下行添加到你的 Package.swift

dependencies: [
  .package(url: "https://github.com/uber/ios-snapshot-test-case.git", from: "7.0.0"),
],

...或者通过 文件 -> Swift 包 -> 添加包依赖... 使用存储库的 URL 集成到 Xcode 中。我们建议使用 "升级到下一个主要版本" 与版本字段,因为我们使用了语义版本控制,并且只有破坏性变更在主要版本中。

步骤 2: 设置测试方案

将 "Tests" 替换为你的测试项目名称。

  1. 设置参考图像目录有三种方法,推荐的方法是在你的方案中定义FB_REFERENCE_IMAGE_DIR。这应该指向你希望保存参考图像的目录。我们通常使用以下内容:
名称
FB_REFERENCE_IMAGE_DIR $(SOURCE_ROOT)/$(PROJECT_NAME)Tests/ReferenceImages
IMAGE_DIFF_DIR $(SOURCE_ROOT)/$(PROJECT_NAME)Tests/FailureDiffs

IMAGE_DIFF_DIR定义为保存失败快照差异的目录。同样有三种方法来设置失败的图像差异目录。

创建快照测试

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

特点

  • 根据测试类和选择器自动命名磁盘上的参考图像。
  • 失败时向控制台打印描述性错误消息。(锦上添花:如果已安装Kaleidoscope,则失败消息中将包含用于查看图像差异的单行命令。)
  • 如果您想在一个单次测试方法中执行多个快照,请提供可选的"identifier"。
  • 通过FBSnapshotVerifyLayer支持CALayer
  • 使用usesDrawViewHierarchyInRect来处理像UIVisualEffectUIAppearance和Size Classes这样的情况。
  • 使用fileNameOptions来控制将设备模型(例如iPhoneiPadiPod Touch等)、OS版本、屏幕尺寸和屏幕缩放追加到图像中(允许对同一“快照”进行具有不同OS和设备的多个测试)。

备注

您的单元测试应该位于“应用程序”包中,而不是“逻辑/库”测试包中。(也就是说,它应在模拟器中运行,以便它可以访问UIKit。)

然而,如果您在库/框架中编写快照测试,您可能会希望将测试包保留为库测试包,而不带Test Host。

更多内容请参阅这里

作者

iOSSnapshotTestCase 是由 Facebook 的 Jonathan Dann 编写的,并得到了 Todd Krabach 的重大贡献。

如今,它由 Uber 维护。

许可协议

iOSSnapshotTestCase 采用 MIT 许可协议。请参阅 LICENSE