对 XCTest 宏的一个轻量级封装,旨在使测试代码更具可读性。
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。
由于测试 target 没有“Embedded Binaries”部分,因此必须将 framework 添加到 target 的“Link Binary With Libraries”中,以及一个“Copy Files”构建阶段,将其复制到 target 的 Frameworks 目标位置。
由于 Carthage 构建的是动态 framework,因此你需要设置一个有效的代码签名身份。
将 Miles 添加到你的 Cartfile.private
github "MadeByHecho/Miles"
运行 carthage update
从你的 Carthage/Build/[platform]/
目录中,将 Miles 添加到你的测试 target 的 Link Binary With Libraries 构建阶段
这不是使用 Carthage 管理依赖项的“唯一方法”,有关更多信息,请查看 Carthage 文档