等待带有完成处理程序的*特定*(单个)XCTestExpectation?
Posted
技术标签:
【中文标题】等待带有完成处理程序的*特定*(单个)XCTestExpectation?【英文标题】:Wait for a *specific* (single) XCTestExpectation with a completion handler? 【发布时间】: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? (意思是没有失败)。
【参考方案1】:
创建一个XCTWaiter
并使用wait(for:timeout:),它返回一个XCTWaiter.Result,然后您可以根据需要断言是/不是.timedOut
,或者对结果采取其他措施。通过使用XCTWaiter
,您可以有一个预期超时,而测试不会自动失败。
let result = XCTWaiter().wait(for: [expectation], timeout: 5)
if result == .timedOut ...
【讨论】:
以上是关于等待带有完成处理程序的*特定*(单个)XCTestExpectation?的主要内容,如果未能解决你的问题,请参考以下文章
遇到 failureException 时如何在 XCTest 中停止等待