给定以下方法签名,我如何测试此方法:
func doTheJob(param: String) async throws -> String
XCTAssertThrowsError
美元?
我try 了XCTAssertThrowsError(await object.doTheJob(param: ""))
次,但收到一个错误:
不支持并发的自动关闭中的"async"调用
这个问题的解决方案是什么?
给定以下方法签名,我如何测试此方法:
func doTheJob(param: String) async throws -> String
XCTAssertThrowsError
美元?
我try 了XCTAssertThrowsError(await object.doTheJob(param: ""))
次,但收到一个错误:
不支持并发的自动关闭中的"async"调用
这个问题的解决方案是什么?
使用反馈助手提交此功能请求将是一个好主意,但目前您可以创建一个func
,如果expression
不是throw
,则可以创建XCTFail
func xCTAssertThrowsError<T>(_ expression: @autoclosure () async throws -> T) async {
do {
_ = try await expression()
XCTFail("No error was thrown.")
} catch {
//Pass
}
}
然后你就可以使用它了,就像.
func testExample() async throws {
await xCTAssertThrowsError(try await doSomething())
}
如果您想使用errorHandler
和其他参数,您也可以在您的定制func
中实现这些参数.
func xCTAssertThrowsError<T>(
_ expression: @autoclosure () async throws -> T,
_ message: @autoclosure () -> String = "",
file: StaticString = #filePath,
line: UInt = #line,
_ errorHandler: (Error) -> Void = { _ in }
) async {
do {
_ = try await expression()
XCTFail(message())
} catch {
errorHandler(error)
}
}