Monday 19 June 2017

Xctest Waitforexpectationswithtimeout


Ich teste einen asynchronen Anruf mit XCTestExpectation. Der folgende Code funktioniert (der Test ist erfolgreich), wenn der CompletionHandler vor dem angegebenen 1-Sekunden-Timeout ausgeführt wird. Allerdings, wenn die FertigstellungHandler nicht aufgerufen wird und daher die Erwartung nicht erfüllt ist, anstatt einen Testfehler beim Aufruf zu bekommen waitForExpectationsWithTimeout bekomme ich eine EXCBADACCESS, was nicht sehr praktisch ist, da dies unmöglich macht, die ganze Test Suite Ergebnisse zu sehen. Wie kann ich dies vermeiden und bekomme einen normalen Testfehler gefragt Dec 21 14 um 15: 31Im mit den neuen asynchronen Test-Fähigkeiten von Xcode 6. Alles funktioniert gut, wenn die asynchrone Aufgabe endet vor dem Timeout. Aber wenn die Aufgabe länger dauert als das Timeout, werden die Dinge komplizierter. Hier ist, wie ich meine Tests mache: Leider ruft die Erfüllung Methode nach dem Timeout abgelaufen Abstürze der Test-Suite mit diesem Fehler: API Verletzung - genannt - XCTestExpectation erfüllen, nachdem der Warte-Kontext beendet hat. Natürlich kann ich überprüfen, ob der Test beendet ist, bevor er die Erfüllungsmethode wie folgt anruft: Aber das scheint übermäßig kompliziert und macht den Test viel schwerer zu lesen. Bin ich vermisse etwas Gibt es einen einfacheren Weg, um dieses Problem zu lösen Ja, es gibt eine viel einfachere Möglichkeit, diese API Verletzung Problem zu vermeiden: erklären Sie einfach Ihre Erwartungsvariable als schwach. Obwohl nicht eindeutig dokumentiert, wird die Erwartung freigegeben, wenn das Timeout abläuft. Wenn also die Aufgabe länger dauert als das Timeout, wird die Erwartungsvariable null sein, wenn der Task-Completion-Handler aufgerufen wird. So wird die Erfüllungsmethode nil genannt und nichts getan. Antwortete 18. Dezember um 20:53 Ich kam auf das gleiche Problem, aber in meinem Fall brauchte ich die Swift Version der Antwort oben. Ich arbeite an einem OpenStack Swift Drive für OSX. Wenn ein Ordner lokal mit Finder gelöscht wird, propagiert das Löschen schließlich zum Server, ich brauchte einen Test, der darauf wartet, dass der Server aktualisiert wird. Um den API-Verletzungs-Crash zu vermeiden, änderte Ive meine Erwartungen, um schwach zu sein und den Anruf zu ändern, um es zu erfüllen, umFoldersExpectation. fulfill () mit dem Extra zu erhalten, da die Erwartung jetzt optional ist und null werden kann, in welchem ​​Fall der Erfüllungsruf ignoriert wird. Das hat die Abstürze behoben. Antwortete am 5. August um 9:53 Uhr

No comments:

Post a Comment