XCUI setUpWithError 未等待异步函数完成执行

XCUI setUpWithError not waiting for async functions to finish executing

提问人:Ben 提问时间:10/2/2023 最后编辑:Dávid PásztorBen 更新时间:10/2/2023 访问量:56

问:

我想使用一个函数来防止在每个测试设置中重复代码。setUpWithError

在运行一些同步函数之前,我有几个异步函数要运行。

到目前为止,我有这个:

override func setUpWithError() throws {
    let expectation = XCTestExpectation(description: "Setup")

    Task {
        await function1()
        await function2()
        expectation.fulfill()
    }

    wait(for: [expectation], timeout: defaultTimeout)
    
    synchronousFunction()
}

任务中的期望似乎不会在调用之前“等待”。synchronousFunction()

请问我该如何解决这个问题?非常感谢。

Swift 异步 xctest xcuitest xcuiautomation

评论

0赞 lorem ipsum 10/2/2023
应注意新并发不需要“满足异步等待”预期
0赞 Ben 10/2/2023
当我不使用预期时,如该视频所示: 返回 .override func setUp() async throws { XCTAssertNoThrow(try await function1()) }'async' call in an autoclosure that does not support concurrency
0赞 lorem ipsum 10/2/2023
这意味着您没有添加“async”关键字,只需将其添加到签名中,就像示例一样。
0赞 Ben 10/2/2023
所以我在覆盖 setUp 函数中,我调用的实际函数是 - 。它需要添加到其他地方吗?asyncasyncfunc function1() async { await doSomething()}
0赞 lorem ipsum 10/2/2023
设置功能就像您在上面的评论中输入的代码一样

答:

0赞 Dávid Pásztor 10/2/2023 #1

如果要在那里执行异步代码,则需要使用其他方法。setUp

您需要覆盖 .有关详细信息,请参阅文档func setUp() async throws

评论

0赞 Ben 10/3/2023
我相信我在等价物上看到了同样的问题。我会重新审视这一点,谢谢。async throws..