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

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)
    }
}

Swift相关问答推荐

Form中的Divider在macOS上并不完全扩展

日期格式yyyyyy—MM—dd hh:mm:ss +0000到dd MMM,以swift格式表示""""

在`NavigationStack`中使用`SafeAreaInset`修饰符时出现SwiftUI异常行为

如何在SwiftUI 4+(iOS 16+)中使用新的NavigationStack进行导航

如何获取嵌套数组中项的路径以修改数组?

如何在macOS中延迟退出应用程序的退出操作?

使用泛型的 Swift 枚举值

为什么 SwiftUI 不在工具栏菜单中反映 @State 属性值?

如何更改任务栏 colored颜色 和 sf 符号 colored颜色 ?

是否可以使任何协议符合 Codable?

无法增加系统镜像的大小

如何在 Swift 中将 XPC 自定义类列入白名单?

符合协议要求委托变量在 ios13 中可用

Swift 动画 WithDuration 语法是什么?

try 在解除分配时加载视图控制器的视图... UIAlertController

如何在 Swift 中遍历 struct 属性?

为什么'nil' 与 Swift 3 中的 'UnsafePointer' 不兼容?

SwiftUI - 呈现工作表后导航栏按钮不可点击

Swift 2.0 中的 do { } catch 不处理从这里抛出的错误

Switch 语句中的字符串:String不符合协议IntervalType