Approval Tests (审批测试) 是一种替代断言的方法。对于测试具有复杂值(如长字符串)、大量属性或对象集合的对象,您会发现它们非常有用。
ApprovalTests.Swift 与 XCTest 测试框架兼容。
我们将首先编写一个简单的单元测试来验证名称列表。但我们将使用 Approvals.verifyAll
,而不是使用 XCTest 的 XCTAssertEqual
函数。
class SampleArrayTests: XCTestCase {
func testList() throws {
var names = ["Llewellyn", "James", "Dan", "Jason", "Katrina"]
names.sort()
try Approvals.verifyAll(names, label: "")
}
verifyAll()
函数对项目列表执行测试断言。与普通断言不同,它不指定预期列表。相反,它会生成一个与您的测试套件和测试用例名称匹配的 “received”(已接收)文件。在此示例中,它将写入文件 SampleArrayTests.testList.received.txt
[0] = Dan
[1] = James
[2] = Jason
[3] = Katrina
[4] = Llewellyn
它还在差异编辑器中打开两个文件——“received”(已接收)文件和 “approved”(已批准)文件。
要批准结果,请告诉差异编辑器将更改从左侧应用到右侧
大多数时候,您将使用 支持的差异工具 之一来检查和批准结果。如果您没有任何这些差异工具,您可以将已接收的文件重命名为 SampleArrayTests.testList.approved.txt
,现在测试将会通过。
开始的最佳方式是下载并打开其中一个入门项目
这些是标准项目,可以导入到任何编辑器或 IDE 中。
它们也都具有使用 Github actions 的 CI。
它们准备就绪,包含:
.gitignore
文件,用于排除审批工件ApprovalTests.Swift 附带了有用的验证器
Approvals.verify
- 验证对象或字典Approvals.verifyAll
- 验证项目数组(或使用数组作为输入)Approvals.verifyAsJSON
- 验证转换为 JSON 的可编码对象Approvals.verifyQuery
- 验证查询,并在失败时显示查询结果Approvals.verifySequence
- 验证变化值的序列ApprovalTests.Swift 可以直接运行 macOS 测试。但对于 iOS 测试,您需要在 Mac 上运行一个单独的进程来监视差异。从命令行运行 iOSApprovalsWatcher.py,并为其提供测试目录的路径。
您必须将所有 “approved”(已批准)文件添加到您的源代码控制系统。但是 “received”(已接收)文件可以随任何运行而更改,应该被忽略。对于 Git,将此添加到您的 .gitignore
*.received.*
如果您有 iOS 测试,您还应该将 command.sh
添加到您的 .gitignore
中。(它们是由 iOS 端编写的脚本,供文件监视器从 macOS 端执行。)因此,对于 iOS 测试,请务必排除
*.received.*
command.sh
在此处查看示例 包清单
获取以下依赖项
dependencies: [
.package(
url: "https://github.com/approvals/ApprovalTests.Swift",
branch: "master"
),
],
然后将其添加到您的测试目标
.testTarget(
name: "ApprovalTests.Swift.StarterProject.MacOSTests",
dependencies: [
"ApprovalTests.Swift.StarterProject.MacOS",
"ApprovalTests.Swift",
],
将以下内容添加到您的 Cartfile
github "approvals/ApprovalTests.Swift" ~> 2.0
然后将构建的框架从相应的 Carthage/Build 目录拖到您的项目中,但禁用 “Copy items into destination group’s folder”(将项目复制到目标组的文件夹)选项。
如果您想使用 Cocoapods 添加 ApprovalTests.Swift,请将以下依赖项添加到您的 Podfile 中。大多数人希望在他们的测试目标中使用 ApprovalTests.Swift,而不包括来自他们的主要目标的任何 pod。
target 'MyTests' do
inherit! :search_paths
use_frameworks!
pod 'ApprovalTests_Swift', '~> 2.0'
end
在 Twitter 上询问 Llewellyn Falco @LlewellynFalco 或 Jon Reid @qcoding。
您还可以在 YouTube 上观看一系列关于在 .Net 中使用 ApprovalTests的短视频。
更喜欢通过聆听来学习?那么您可能会喜欢以下播客