运行异步操作的XCTest时,调用XCTFail()不会立即使测试失败,这是我的期望。取而代之的是,从到的剩余任何超时时间都会wait首先耗尽,这不必要地延长了测试时间,并且还会创建一个令人困惑的失败消息,表明由于超时而导致测试失败,而实际上却明确地失败了。
func testFoo() {
let x = expectation(description: "foo")
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
XCTFail("bar")
}
wait(for: [x], timeout: 5)
}
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,尽管故障在大约2秒钟后发生,但是直到经过5秒钟的超时时间后测试才完成。当我第一次注意到这种行为时,我以为我做错了什么,但这似乎只是它的工作方式,至少在当前版本的Xcode(9.2)中是如此。
由于我没有通过Google或stackoverflow搜索找到关于此的任何提及,因此我分享了一个发现的解决方法。
我发现XCTestExpectation在调用后仍然可以实现XCTFail(),这不算作通过,而是立即使过期wait。因此,将其应用于我的初始示例:
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
XCTFail("bar")
x.fulfill()
}
Run Code Online (Sandbox Code Playgroud)
这可能是Apple期望的,但对我而言并不直观,而且我在任何地方都找不到文档。因此,希望这可以节省别人花时间让我感到困惑的时间。
| 归档时间: |
|
| 查看次数: |
761 次 |
| 最近记录: |