Чтобы добавить задержки в моих тестах, я реализовал это:
func execute(after: TimeInterval, testBlock: () -> Void) {
let result = XCTWaiter.wait(for: [expectation(description: "Delayed Test")], timeout: after)
if result == XCTWaiter.Result.timedOut {
testBlock()
} else {
XCTFail("Delay interrupted.")
}
}
Тогда я написал тест:
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)
}
}
Почему этот второй XCTAssert()
регулярно выходит из строя?
Это единственное, что работает на моем симуляторе. Вы ожидаете некоторого дрожания, но разве это не должно быть в 1 или 2 раза больше системного такта 1/60 с?