Ios 有时,XCTWaiter.wait()超时似乎需要更长的时间

Ios 有时,XCTWaiter.wait()超时似乎需要更长的时间,ios,swift,wait,xctest,xctwaiter,Ios,Swift,Wait,Xctest,Xctwaiter,然后我写了一个测试: func testExecute() { var i = 1 DispatchQueue.main.asyncAfter(deadline: .now() + 0.40) { i = 2 } execute(after: 0.20) { XCTAssert(i == 1) } execute(after: 0.15) { XCTAssert(i == 1) // Fai

然后我写了一个测试:

func testExecute() {
    var i = 1

    DispatchQueue.main.asyncAfter(deadline: .now() + 0.40) {
        i = 2
    }

    execute(after: 0.20) {
        XCTAssert(i == 1)
    }

    execute(after: 0.15) {
        XCTAssert(i == 1)   // Fails once every three or four runs.
    }

    execute(after: 0.06) {  // Never fails.
        XCTAssert(i == 2)
    }
}
为什么第二个
xctasert()
会定期失败


这是唯一在我的模拟器上运行的东西。您可能会遇到一些抖动,但这不应该保持在系统时钟周期1/60秒的1倍或2倍吗?

事实证明,延迟可能需要相当长的时间(在2011年的实验中,延迟时间最多可达200毫秒:)


使用此
execute(之后:testBlock:)
函数时必须留有足够的余量。

我尝试了您的代码,但在使用断点时失败。@A.Munzer当然。我没有断点。
func testExecute() {
    var i = 1

    DispatchQueue.main.asyncAfter(deadline: .now() + 0.40) {
        i = 2
    }

    execute(after: 0.20) {
        XCTAssert(i == 1)
    }

    execute(after: 0.15) {
        XCTAssert(i == 1)   // Fails once every three or four runs.
    }

    execute(after: 0.06) {  // Never fails.
        XCTAssert(i == 2)
    }
}