swift XCTAssertThrowsError for explanc/await函数

ohtdti5x  于 2023-11-16  发布在  Swift
关注(0)|答案(1)|浏览(83)

给定以下方法签名,我如何测试此方法:

func doTheJob(param: String) async throws -> String

字符串
XCTAssertThrowsError
我尝试了XCTAssertThrowsError(await object.doTheJob(param: "")),但得到一个错误:
在不支持并发的自动闭包中调用“autoclosure”
解决这个问题的办法是什么?

5f0d552i

5f0d552i1#

最好使用Feedback Assistant为此提交一个功能请求,但现在您可以创建一个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)
    }
}

相关问题