Die Google Cloud -Clientbibliotheken für Rust bieten Hilfsprogramme, die die Interaktion mit Vorgängen mit langer Ausführungszeit vereinfachen. Um das Verhalten von LROs in Unittests zu simulieren, müssen Sie die zugrunde liegenden Details verstehen, die diese Hilfsprogramme abstrahieren. In diesem Leitfaden erfahren Sie, wie Sie Unit-Tests für die automatische und manuelle LRO-Abfrage schreiben, einschließlich Fehlerszenarien.
Vorbereitung
In diesem Leitfaden wird davon ausgegangen, dass Sie mit den folgenden Leitfäden vertraut sind:
Automatische Abfrage testen
Angenommen, Ihr Anwendungscode wartet auf lro::Poller::until_done() (automatisches Abfragen):
Da die Anwendung nur das Endergebnis des LRO verwendet, müssen Sie nicht testen, wie sie mit Zwischenergebnissen von Abfragen umgeht. Ihr Test kann das Endergebnis des LRO direkt aus dem Mock zurückgeben.
longrunning::model::Operation erstellen
Angenommen, Sie möchten, dass der Aufruf die folgende Antwort zurückgibt:
Der Stub gibt einen longrunning::model::Operation anstelle eines BatchRecognizeResponse zurück. Packen Sie die erwartete Antwort in Operation::result:
Setzen Sie das Feld done auf true, um dem Poller mitzuteilen, dass der Vorgang abgeschlossen ist. Dadurch wird die Abfrageschleife beendet:
Test schreiben
Definieren Sie die Mock-Struktur, die das
speech::stub::Speech-Trait implementiert:Erstellen Sie im Test das Mock und legen Sie Erwartungen dafür fest:
Erstellen Sie einen Client aus dem Mock, rufen Sie die Funktion auf und prüfen Sie die Antwort:
Manuelle Abfrage mit Zwischenmetadaten testen
Angenommen, Ihr Anwendungscode fragt manuell ab und verarbeitet Teilaktualisierungen:
Sie können simulieren, wie sich die Anwendung verhält, wenn sie Zwischenmetadaten empfängt, indem Sie laufende Vorgänge aus dem Mock zurückgeben.
longrunning::model::Operation erstellen
Der RPC BatchRecognize gibt Teilergebnisse als speech::model::OperationMetadata zurück. Packen Sie diese Metadaten in das Feld Operation::metadata der zurückgegebenen longrunning::model::Operation:
Test schreiben
Definieren Sie die Mock-Struktur, die das
speech::stub::Speech-Trait implementiert undget_operation()überschreibt:Erstellen Sie im Test das Mock und legen Sie Erwartungen fest, damit Teilergebnisse (25 %, 50 %, 75 %) und dann das Endergebnis zurückgegeben werden:
Beachten Sie die folgenden Details zur Konfiguration der Erwartungen:
- Erste im Vergleich zu nachfolgenden RPCs: Die erste Erwartung wird für
batch_recognize()festgelegt, während alle nachfolgenden Erwartungen fürget_operation()festgelegt werden. Der ersteBatchRecognize-RPC startet den LRO auf dem Server und gibt eine Vorgangs-ID im Feldnamezurück (aus Gründen der Übersichtlichkeit im Testcode weggelassen). Ab diesem Zeitpunkt fragt die Clientbibliothek den Status dieses LRO mit dem RPCGetOperationab. - Aufrufreihenfolge: Erwartungen werden in einem
Sequenceregistriert. So kannmockalldie Reihenfolge der Aufrufe überprüfen und feststellen, welcheexpect_get_operation-Erwartung mit der jeweiligen Abfrage übereinstimmt.
- Erste im Vergleich zu nachfolgenden RPCs: Die erste Erwartung wird für
Erstellen Sie einen Client aus dem Mock, rufen Sie die Funktion auf und prüfen Sie die Antwort:
Fehler simulieren
Fehler können an mehreren Stellen während eines LRO auftreten.
Wenn Ihre Anwendung automatisches Polling verwendet, sind alle Fehlerquellen gleichwertig: until_done() gibt den Fehler im Result zurück, unabhängig davon, wo er aufgetreten ist.
Die Simulation eines Fehlers beim Starten eines LRO ist der einfachste Test.
Fehler beim Starten eines Vorgangs mit langer Ausführungszeit simulieren
Wenn Sie einen Fehler beim Starten eines LRO simulieren möchten, konfigurieren Sie die erste Anfrage so, dass sie mit einem Fehler fehlschlägt:
Beim manuellen Abfragen erhält der Zweig PollingResult::Completed den Fehler beim Starten des LRO, wodurch die Abfrageschleife beendet wird:
LRO simulieren, der zu einem Fehler führt
Wenn Sie einen LRO simulieren möchten, der nach der Rückgabe von Zwischenmetadaten fehlschlägt, geben Sie den Fehler im endgültigen longrunning::model::Operation zurück:
Legen Sie Erwartungen fest, um den fehlgeschlagenen Operation von get_operation zurückzugeben:
Bei der manuellen Abfrage erhält der Zweig PollingResult::Completed das Fehlerergebnis, wodurch die Abfrageschleife beendet wird:
Abfragefehler simulieren
Abfrageschleifen können auch beendet werden, wenn die Abfragerichtlinie erschöpft ist. In diesem Fall kann die Clientbibliothek nicht eindeutig feststellen, ob der LRO abgeschlossen wurde.
Wenn Ihre Anwendung eine benutzerdefinierte Logik zur Verarbeitung von Abfragefehlern hat, können Sie sie testen, indem Sie einen Fehler direkt aus der get_operation-Erwartung zurückgeben:
Bei der manuellen Abfrage erhält der PollingResult::PollingError-Zweig den simulierten Abfragefehler:
Vollständiger Testcode
In den folgenden Abschnitten finden Sie den vollständigen Code für die in diesem Leitfaden beschriebenen Tests.