此项目已迁移到新的仓库,请在此处查找:kishikawakatsumi / swift-power-assert
Power assertions(又称图解断言)通过提供条件评估过程中产生的值的信息来增强你的断言失败,并以易于理解的形式呈现。Power assertions 是 Spock(以及后来整个 Groovy 语言,独立于 Spock),ScalaTest 和 Expecty 中广受欢迎的功能。
Power assertions 为你的测试提供描述性的断言消息,如下所示。
XCTAssert(max(a, b) == c)
| | | | |
7 4 7 | 12
false
XCTAssert(xs.contains(4))
| | |
| false 4
[1, 2, 3]
XCTAssert("hello".hasPrefix("h") && "goodbye".hasSuffix("y"))
| | | | | | |
"hello" true "h" | "goodbye" false "y"
false
SwiftPowerAssert 实时演示
https://swift-power-assert.kishikawakatsumi.com/
$ git clone https://github.com/kishikawakatsumi/SwiftPowerAssert
$ cd SwiftPowerAssert
$ swift build -c release
将文件(.build/release/swift-power-assert
)复制到你的二进制文件位置。
将 xcodebuild test...
命令替换为 swift-power-assert xctest -Xxcodebuild test ...
$ /path/to/swift-power-assert xctest -Xxcodebuild test -scheme Atlas-Package
将 swift test...
命令替换为 swift-power-assert test -Xswift test ...
$ /path/to/swift-power-assert test -Xswift test
注意: SwiftPowerAssert 在测试期间将工具代码注入到 XCTAssert()
方法族中。SwiftPowerAssert 在执行测试之前备份源文件,并在测试完成后自动恢复。但是,由于意外崩溃或其他错误,原始文件可能无法恢复。请在 Git 管理的项目中使用它。
你可以使用以下命令运行示例项目
$ swift build -c release
$ (cd Fixtures/Atlas && ../../.build/release/swift-power-assert test -Xswift test)
USAGE: swift-power-assert [options] subcommand [options]
OPTIONS:
--verbose Show more debugging information
--help Display available options
SUBCOMMANDS:
test Run swift test with power assertion
xctest Run XCTest with power assertion.
你可以在 -Xxcodebuild
或 -Xswift
之后传递任何 xcodebuild
或 swift
选项。
$ /path/to/swift-power-assert xctest -Xxcodebuild test -project Atlas.xcodeproj \
-scheme Atlas-Package -sdk iphonesimulator \
-destination "name=iPhone X,OS=11.2"
$ /path/to/swift-power-assert test -Xswift test -c release -Xswiftc -enable-testing
什么都没发生?如果测试成功,则不会输出任何内容。如果总是想看到丰富的 ASCII 图,请启用 --verbose
选项。无论断言成功与否,总是输出图表。
$ /path/to/swift-power-assert --verbose xctest -Xxcodebuild test -project Atlas.xcodeproj -scheme Atlas-Package
$ /path/to/swift-power-assert --verbose test -Xswift test
let a = 10
let b = 9
XCTAssert(a * b == 91)
// Output:
// XCTAssert(a * b == 91)
// | | | | |
// | | 9 | 91
// | 90 false
// 10
let xs = [1, 2, 3]
XCTAssert(xs.contains(4))
// Output:
// XCTAssert(xs.contains(4))
// | | |
// | false 4
// [1, 2, 3]
XCTAssert("hello".hasPrefix("h") && "goodbye".hasSuffix("y"))
// Output:
// XCTAssert("hello".hasPrefix("h") && "goodbye".hasSuffix("y"))
// | | | | | | |
// "hello" true "h" | "goodbye" false "y"
// false
let d = 4
let e = 7
let f = 12
XCTAssert(max(d, e) == f)
XCTAssert(d + e > f)
// Output:
// XCTAssert(max(d, e) == f)
// | | | | |
// 7 4 7 | 12
// false
// XCTAssert(d + e > f)
// | | | | |
// 4 | 7 | 12
// 11 false
struct Person {
let name: String
let age: Int
var isTeenager: Bool {
return age <= 12 && age >= 20
}
}
let john = Person(name: "John", age: 42)
let mike = Person(name: "Mike", age: 13)
XCTAssert(john.isTeenager)
XCTAssert(mike.isTeenager && john.age < mike.age)
// Output:
// XCTAssert(john.isTeenager)
// | |
// | false
// Person(name: "John", age: 42)
// XCTAssert(mike.isTeenager && john.age < mike.age)
// | | | | | | | |
// | false | | 42 | | 13
// | | | | Person(name: "Mike", age: 13)
// | | | false
// | | Person(name: "John", age: 42)
// | false
// Person(name: "Mike", age: 13)
Kishikawa Katsumi, kishikawakatsumi@mac.com
SwiftPowerAssert 使用 Apache 2.0 许可证。 有关更多信息,请参见 LICENSE 文件。