Miles

对 XCTest 宏的一个轻量级封装,旨在使测试代码更具可读性。

Carthage compatible

Miles 是一个解决 XCTest 可读性问题的简单方案。

我感觉大约每隔 6 个月左右,我就会加入 Quick/Kiwi 的阵营(因为我对 XCTest 的可读性感到沮丧),但最终又会因 Xcode 的一些限制而感到失望。 Miles 是我能想到的解决这个问题的最简单方法。

Miles 以 Darius Miles 命名,他是一位前职业篮球运动员,并在 2004 年的电影《完美学分》中扮演了一个角色,在剧中他和 5 名学生试图窃取 SAT 考试。

背景

苹果的 Xcode 包含了 XCTest 框架,该框架提供了断言宏来测试代码的行为是否正确。 例如,要断言 1 + 1 = 2,XCTest 需要你这样写:

XCTAssertEqual(1 + 1, 2, "expected one plus one to equal two")

在像 Nimble 这样更强大的匹配器框架中,你可以得到更具可读性的代码:

expect(1 + 1).to(equal(2))

在 Miles 中,你可以得到我认为更具可读性的代码:

(1+1).shouldEqual(2)

用法

Miles.swift 定义了所有的扩展,所以请确保它包含在你的测试 Target 中,或者你在你想要测试的类中导入 Miles。 然后,当你想要验证 5+5 = 10 时,你可以这样做:

func testThatFivePlusFiveEqualsTen() {
	10.shouldEqual(5 + 5)
}

如果你想做一些更复杂的事情,比如验证某个字符串是否包含某个后缀,那么代码看起来会像这样:

func testThatMilesEndsInLes() {
	let miles = "miles"
	miles.shouldHaveSuffix("les")
}

Miles 目前为许多 Swift 标准类型提供了扩展,包括:

由于 Swift 目前不支持对泛型类型的公共扩展,Miles 提供了全局函数来验证 Array、Dictionary 和 Optional 类型。

安装

以下说明取自并改编自 Quick,因为这是我见过的用于与测试 Target 集成的最佳资源。 因此,请注意,你需要拖入的是 Miles,而不是 Quick 和 Nimble。

如何使用 Carthage 安装 Miles

由于测试 target 没有“Embedded Binaries”部分,因此必须将 framework 添加到 target 的“Link Binary With Libraries”中,以及一个“Copy Files”构建阶段,将其复制到 target 的 Frameworks 目标位置。

由于 Carthage 构建的是动态 framework,因此你需要设置一个有效的代码签名身份。

  1. 将 Miles 添加到你的 Cartfile.private

    github "MadeByHecho/Miles"
    
  2. 运行 carthage update

  3. 从你的 Carthage/Build/[platform]/ 目录中,将 Miles 添加到你的测试 target 的 Link Binary With Libraries 构建阶段

  4. 为你的测试 target 创建一个类型为 Copy Files 的新构建阶段

  5. Destination 设置为 Frameworks,然后添加 Miles framework

这不是使用 Carthage 管理依赖项的“唯一方法”,有关更多信息,请查看 Carthage 文档