“快照测试用例” 获取一个已配置的 UIView
或 CALayer
,并使用必要的 UIKit 或 Core Animation 方法来生成其内容的图像快照。它将此快照与存储在您的源代码仓库中的“参考图像”进行比较,如果两个图像不匹配,则测试失败。
我们编写了大量的 UI 代码。在创建 UIView
实例时,有很多我们想要正确处理的边缘情况
测试逻辑代码很简单,但如何测试视图就不那么明显了。您可以进行大量的矩形断言,但这些断言很难理解或可视化。查看图像差异可以准确地向您展示发生了什么变化以及它将如何呈现给用户。
iOSSnapshotTestCase
的开发是为了使快照测试变得容易。
将以下行添加到您的 Podfile
target "Tests" do
use_frameworks!
pod 'iOSSnapshotTestCase'
end
如果您的测试目标仅是 Objective-C,请使用 iOSSnapshotTestCase/Core
代替,它不包含 Swift 支持。
将以下行添加到您的 Cartfile
github "uber/ios-snapshot-test-case" ~> 8.0.0
将以下行添加到您的 Package.swift
dependencies: [
.package(url: "https://github.com/uber/ios-snapshot-test-case.git", from: "8.0.0"),
],
...或者通过 Xcode 的 File -> Swift Packages -> Add Package Dependency...
使用仓库的 URL 进行集成。我们建议在 Version 字段中使用 “Up to Next Major”,因为我们使用语义化版本控制,并且仅在主版本中进行破坏性更改。
将 “Tests” 替换为您的测试项目名称。
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
到您想要存储失败快照差异的目录。还有 三种方法 设置失败图像差异目录。
FBSnapshotTestCase
而不是 XCTestCase
。FBSnapshotVerifyView
。-setUp
方法中,使用 self.recordMode = YES;
运行测试一次。(这会在磁盘上创建参考图像。)FBSnapshotVerifyLayer
支持 CALayer
。usesDrawViewHierarchyInRect
用于处理诸如 UIVisualEffect
、UIAppearance
和 Size Classes 之类的情况。fileNameOptions
用于控制将设备型号 (iPhone
, iPad
, iPod Touch
等), 操作系统版本, 屏幕尺寸和屏幕缩放比例附加到图像 (允许为不同 OS
和设备的相同 «快照» 进行多次测试)。您的单元测试应该在 “application” bundle 内,而不是 “logic/library” 测试 bundle 内。(也就是说,它应该在 Simulator 中运行,以便它可以访问 UIKit。)
然而,如果您在库/框架中编写快照测试,您可能希望将您的测试 bundle 保留为没有 Test Host 的库测试 bundle。
在此处阅读更多信息:这里。
iOSSnapshotTestCase
最初由 Jonathan Dann 在 Facebook 编写,Todd Krabach 贡献了重要代码。
今天它由 Uber 维护。
iOSSnapshotTestCase
使用 MIT 许可证。请参阅 LICENSE
。