Swift 2.x中针对抛出函数的自定义断言。更多信息请参阅博客文章。
自定义断言允许进行以下抛出函数断言
ErrorType
实现者。ErrorType
实现者的案例。示例使用
func test_AssertsThrowingAnyError() {
let movie = Movie()
AssertThrows(try movie.throwOnUnkown(.Unkown))
}
func test_AssertsThrowingSpecificType() {
let movie = Movie()
AssertThrows(TestError.self, try movie.throwOnUnkown(.Unkown))
}
func test_AssertThrows_ThrowingSpecificCaseOfType() {
let movie = Movie()
AssertThrows(TestError.IllegalArgument, try movie.throwOnUnkown(.Unkown))
}
有一个限制 - ErrorType
兼容的枚举,如果有关联数据,也必须实现 Equatable
协议,才能用 AssertThrows
进行验证。标准枚举都是免费的。
自定义断言解决了像这样的普通 XCTest 测试的问题
func test_throwOnUnkown_UnknownPassed_ThrowsAnyError() {
do {
try Movie().throwOnUnkown(.Unkown)
XCTFail()
} catch {
}
}
func test_throwOnUnkown_UnknownPassed_ThrowsTestError() {
do {
try Movie().throwOnUnkown(.Unkown)
XCTFail()
} catch {
guard let _ = error as? TestError else {
return XCTFail()
}
}
}
func test_throwOnUnkown_UnknownPassed_ThrowsIllegalArgument() {
do {
try Movie().throwOnUnkown(.Unkown)
XCTFail()
} catch {
guard let error = error as? TestError else {
return XCTFail()
}
XCTAssertEqual(TestError.IllegalArgument, error)
}
}