ApprovalTests

Build Status Swift Package Index Swift Version Compatibility Swift Package Index Platform Compatibility Carthage compatible CocoaPods Version

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”(已批准)文件。

Results shown in diff editor

要批准结果,请告诉差异编辑器将更改从左侧应用到右侧

Results copied from received to approved

大多数时候,您将使用 支持的差异工具 之一来检查和批准结果。如果您没有任何这些差异工具,您可以将已接收的文件重命名为 SampleArrayTests.testList.approved.txt,现在测试将会通过。

入门指南

开始的最佳方式是下载并打开其中一个入门项目

这些是标准项目,可以导入到任何编辑器或 IDE 中。
它们也都具有使用 Github actions 的 CI。

它们准备就绪,包含:

预定义的验证器

ApprovalTests.Swift 附带了有用的验证器

如何在 iOS 中使用

ApprovalTests.Swift 可以直接运行 macOS 测试。但对于 iOS 测试,您需要在 Mac 上运行一个单独的进程来监视差异。从命令行运行 iOSApprovalsWatcher.py,并为其提供测试目录的路径。

要从源代码控制中排除哪些文件工件

您必须将所有 “approved”(已批准)文件添加到您的源代码控制系统。但是 “received”(已接收)文件可以随任何运行而更改,应该被忽略。对于 Git,将此添加到您的 .gitignore

*.received.*

如果您有 iOS 测试,您还应该将 command.sh 添加到您的 .gitignore 中。(它们是由 iOS 端编写的脚本,供文件监视器从 macOS 端执行。)因此,对于 iOS 测试,请务必排除

*.received.*
command.sh

获取它的其他方式

Swift Package Manager (Swift 包管理器)

在此处查看示例 包清单

获取以下依赖项

dependencies: [
    .package(
        url: "https://github.com/approvals/ApprovalTests.Swift",
        branch: "master"
    ),
],

锚点

然后将其添加到您的测试目标

.testTarget(
    name: "ApprovalTests.Swift.StarterProject.MacOSTests",
    dependencies: [
        "ApprovalTests.Swift.StarterProject.MacOS",
        "ApprovalTests.Swift",
    ],

锚点

Carthage

将以下内容添加到您的 Cartfile

github "approvals/ApprovalTests.Swift" ~> 2.0

然后将构建的框架从相应的 Carthage/Build 目录拖到您的项目中,但禁用 “Copy items into destination group’s folder”(将项目复制到目标组的文件夹)选项。

CocoaPods

如果您想使用 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的短视频。

播客

更喜欢通过聆听来学习?那么您可能会喜欢以下播客