【问题标题】:Wait for a *specific* (single) XCTestExpectation with a completion handler?等待带有完成处理程序的*特定*(单个)XCTestExpectation?
【发布时间】:2019-11-29 23:43:02
【问题描述】:

有没有人设法等待具有类似于 (waitForExpectations:timeout:handler)[https://developer.apple.com/documentation/xctest/xctestcase/1500748-waitforexpectations] 的完成处理程序(XCWaitCompletionHandler 或等效项)的特定、单个 XCTestExpectation

我只想等待一个特定的期望,但我想知道它是否超时。 XCWaitCompletionHandler 给了我这些信息。但是期望本身没有属性来标记它是否超时。

(是的,这是一个相当高级的用例……)

【问题讨论】:

  • 我试着聪明一点,从可选的testRun 中读出 failedTestCases 计数,我的想法是检查它是否增加了 1,如果是,则可能因超时而失败。但是意识到并行运行多个测试是不可靠的?也许使用DispatchQueue.main.sync
  • 另一个“太聪明”的尝试是将assertForOverFulfill 设置为true 并在之后调用fulfill,但不确定如何捕获aassert? (意思是没有失败)。

标签: swift xctest


【解决方案1】:

创建一个XCTWaiter 并使用wait(for:timeout:),它返回一个XCTWaiter.Result,然后您可以根据需要断言是/不是.timedOut,或者对结果采取其他措施。通过使用XCTWaiter,您可以有一个预期超时,而测试不会自动失败。

let result = XCTWaiter().wait(for: [expectation], timeout: 5)
if result == .timedOut { ... }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2015-10-19
    • 1970-01-01
    相关资源
    最近更新 更多