在闭包中调用时,XCTAssertNoThrow不编译

时间:2018-01-28 15:27:32

标签: swift xctest

尝试编译一个测试用例,其中XCTAssertNoThrow在闭包中使用而没有运气。为什么这么僵硬,重新抛出或发生了什么?

let e = expectation(description: "Wait")

distillery.produce(request: Request(bottles: 1337)) { (result) in // error
  XCTAssertNoThrow(try result.unwrap())

  e.fulfill()
}

Xcode在编译期间抛出错误:

  

投掷类型'(_)抛出函数的转换无效 - > ()'   到非投掷功能类型'(结果) - >空隙'

ps:这似乎是Swift中的一个错误,我认为https://bugs.swift.org/browse/SR-487

1 个答案:

答案 0 :(得分:3)

通过将XCTAssertNoThrow包装到辅助函数

来解决这个问题
func assertOk<T>(_ result: Result<T>, file: StaticString = #file, line: UInt = #line) {
    XCTAssertNoThrow(try result.unwrap(), file: file, line: line)
}