提问人:Richard Topchii 提问时间:11/1/2023 更新时间:11/1/2023 访问量:122
XCTAssertThrowsError 用于 async/await 函数
XCTAssertThrowsError for async/await function
问:
给定以下方法签名,如何测试此方法:
func doTheJob(param: String) async throws -> String
跟?XCTAssertThrowsError
我试过了,但出现错误:XCTAssertThrowsError(await object.doTheJob(param: ""))
不支持并发的自动闭合中的“async”调用
这个问题的解决方案是什么?
答:
1赞
lorem ipsum
11/1/2023
#1
使用反馈助手为此提交功能请求是个好主意,但现在您可以创建一个,如果没有func
XCTFail
expression
throw
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)
}
}
评论
0赞
Richard Topchii
11/1/2023
有趣的设计,我会调查errorHandler
1赞
lorem ipsum
11/1/2023
@RichardTopchii第二个函数只是从文档中复制和粘贴,您也可以向其添加异步,例如在测试期间有错误处理程序的表达式。
1赞
lorem ipsum
11/1/2023
@RichardTopchii它将与 async/await 同步并在 catch 中被调用,如果您将 async 添加到处理程序,只需将 await 添加到它。
1赞
lorem ipsum
11/1/2023
@RichardTopchii不,只要你以正确的方式使用异步/await,就会有大量的“黑客”没有抓住重点。
1赞
lorem ipsum
11/1/2023
@RichardTopchii很乐意帮忙!
评论
XCTAssertThrowsError