捕获火花是一个Swift测试框架,它帮助您对代码的错误处理进行预期测试。为此,它提供了两个高阶函数,这些函数接受抛出函数并检查给定的闭包是否抛出或未抛出。它与XCTest
提供的预期器无缝集成。
AssertNotThrow
允许您对failable函数的愉快路径编写安全测试。它帮助您避免在测试中使用 try!
操作符。
如果您想测试一个通常可能会失败的功能,您可能会考虑使用 try
。但这将意味着您必须将测试方法声明为抛出,这会导致 XCTest 不再执行测试。
因此,结果通常是您需要编写以下内容:
XCTAssertEqual(try! fib(x), 21)
如果表达式失败,整个测试套件不会执行得更远并立即中止,这在 CI 上非常不理想,而且在您使用 TDD 的工作流程中也是如此。
相反,您现在可以编写以下内容
AssertNotThrow {
XCTAssertEqual(try fib(x), 21)
}
或者
AssertNotThrow(try fib(x)).map { (y: Int) in
XCTAssertEqual(y, 21)
}
如果在表达式中出现故障,测试失败。
AssertThrow
允许您轻松编写failable函数的异常路径的详尽测试。它帮助您避免在测试中反复编写相同的样板代码。
如果您想测试一个功能,它会因为给定的参数而失败,您通常会需要编写以下内容:
do {
try fib(-1)
XCTFail("Expected to fail, but did not failed!")
} catch Error.ArgumentMayNotBeNegative {
// succeed silently
} catch error {
XCTFail("Failed with a different error than expected!")
}
相反,您现在可以编写以下内容
AssertThrow(Error.ArgumentMayNotBeNegative) {
try fib(-1)
}
如果表达式或闭包没有抛出预期的错误,则测试失败。
捕获火花通过 CocoaPods 提供。要安装它,只需将其添加到Podfile中的测试目标
use_frameworks!
target "AppTest" do
pod 'CatchingFire'
end
Marius Rackwitz,[email protected]
在 Twitter 上找到我 @mrackwitz。
版本可在MIT许可证下获得。有关更多信息,请参阅 LICENSE 文件。