xcode - 在等待期望时使用 XCTFail 不会阻止超时

标签 xcode xctest

运行异步操作的 XCTest 时,调用 XCTFail() 不会立即使测试失败,这是我的预期。相反,调用 wait 后剩余的任何超时时间都会首先耗尽,这会不必要地延长测试时间,还会产生令人困惑的失败消息,暗示测试因超时而失败,而实际上它是明确失败的.

func testFoo() {
    let x = expectation(description: "foo")

    DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
        XCTFail("bar")
    }

    wait(for: [x], timeout: 5)
}

在上面的示例中,虽然失败发生在大约 2 秒后,但直到 5 秒的超时期限过去后测试才完成。当我第一次注意到这种行为时,我以为我做错了什么,但这似乎就是它的工作方式,至少对于当前版本的 Xcode (9.2) 是这样。

由于我没有通过 google 或 stackoverflow 搜索找到任何提及此问题的信息,因此我将分享我找到的解决方法。

最佳答案

我发现调用XCTFail()后XCTestExpectation仍然可以完成,这不算pass,立即让wait过期。因此,将其应用于我的初始示例:

DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
    XCTFail("bar")
    x.fulfill()
}

这可能是 Apple 所期望的,但它对我来说并不直观,而且我在任何地方都找不到它的文档。所以希望这可以节省其他人我在困惑中度过的时间。

关于xcode - 在等待期望时使用 XCTFail 不会阻止超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48669816/

相关文章:

xcode - 测试 NSLog 输出

ios - 在 Swift 中测试 FIRDataSnapshot

objective-c - ARC - 为什么对象指针在函数定义中需要明确的所有权类型?

xcode - 如何从 faSTLane 只运行一个 ui-test?

swift - 从另一个无法从 SKS 文件加载的 SKScene 呈现的 SKScene

Xcode 7 Playground 标记 : What is keyboard shortcut for Show Rendered Markup

objective-c - 异步 setUp 方法完成后运行测试

xcode9 - XCTest 和 GPX 文件 : Can Location Updates Be Started Automatically?

ios - 是否可以检测 iPhone 何时打开?

ios - 无法使用 AVCapturePhotoOutput 捕捉照片 swift + xcode