Ich habe das Beispiel von hier wieder erstellt: http://www.mokacoding.com/blog/testing-callbacks-in-swift-with-xctest/.Wie löst man einen fehlgeschlagenen Test beim Timeout mit waitForExpectations() aus?
Ich möchte für einen Timeout mit waitForExpectations()
testen. Dies sollte einen lang andauernden Prozess nachahmen, der abgelaufen ist. Um dies zu tun, habe ich einen sleep()
Befehl in der aufgerufenen Funktion, die länger als die Zeitüberschreitung in waitForExpectations()
ist.
Die sleep()
hat jedoch keine Wirkung. Der Test besteht immer. Ich habe versucht, sleep()
vor completion(true)
auch zu setzen, aber das ändert nicht das Ergebnis (d. H. Bestandener Test).
Irgendwelche Ideen, was ich mache, um einen Testfehler bei Timeout auszulösen?
class SomeService {
func doSomethingAsync(completion: (_ success: Bool) ->()) {
completion(true)
sleep(5)
}
}
In Testklasse
let service = SomeService()
service.doSomethingAsync { (success) in
XCTAssertTrue(success, "assert is true")
expect.fulfill()
}
waitForExpectations(timeout: 3) { (error) in
if let error = error {
XCTFail("timeout errored: \(error)")
}
}
Wie bereits erwähnt, setzt 'sleep()' 'vor completion' keine Wirkung. – 4thSpace
Ja, das macht Sinn Entschuldigung, ich habe meine Antwort richtig umformuliert - Sie müssen den Schlaf aus dem asynchronen Abschlussblock aufrufen und nicht in doSomethingAsync, was synchron ist, so dass der Schlaf bereits ausgeführt wurde, bevor der Test zu warten beginnt. – Oletha
Wie würdest du das oben beschriebene rekodieren, also wird 'sleep()' in 'completion' aufgerufen? – 4thSpace