Ich möchte einen asynchronen Webdienstaufruf in meiner Dart-Anwendung zum Testen simulieren. Um die Zufälligkeit dieser Scheinanrufe zu simulieren, die reagieren (möglicherweise nicht in der richtigen Reihenfolge), möchte ich meine Mocks so programmieren, dass sie eine bestimmte Zeit warten (schlafen), bevor sie die 'Zukunft' zurückgeben.
Wie kann ich das machen?
unit-testing
mocking
dart
Vinnie
quelle
quelle
() => "1"
?Es ist nicht immer das, was Sie wollen (manchmal wollen Sie es
Future.delayed
), aber wenn Sie wirklich in Ihrer Dart-Befehlszeilen-App schlafen möchten, können Sie dart: io's verwendensleep()
:quelle
Ausgabe 2019:
Im asynchronen Code
Im Synchronisierungscode
Hinweis: Dies blockiert den gesamten Prozess (isolieren), sodass andere asynchrone Funktionen nicht verarbeitet werden. Es ist auch nicht im Web verfügbar, da Javascript wirklich nur asynchron ist.
quelle
sleep()
blockiert das gesamte Isolat vollständig. Während des Schlafens wird überhaupt kein Dart-Code ausgeführt. Es wird wahrscheinlich zu etwas wie C ++ kompiliertstd::this_thread::sleep_for
.Future.delayed()
plant, dass die asynchrone Funktion später fortgesetzt wird, gibt dann jedoch die Steuerung an die Dart-Ereignisschleife zurück, damit andere asynchrone Funktionen weiterhin ausgeführt werden können.Ich habe festgestellt, dass es in Dart mehrere Implementierungen gibt, um die Ausführung der Codeverzögerung durchzuführen:
quelle
Für die Dart 2+ -Syntax in einem asynchronen Funktionskontext:
quelle
Dies ist ein nützliches Modell, das einen optionalen Parameter verwenden kann, um einen Fehler zu verspotten:
Sie können es so verwenden:
quelle
Ich musste auch warten, bis ein Service während eines Komponententests abgeschlossen war. Ich habe folgendes implementiert:
quelle