Mecking Bigquery für Integrationstests

8

Während andere Schnittstellen in meinen Java-Integrationstests relativ einfach zu überspielen sind, konnte ich keine richtige Art und Weise finden, BigQuery zu verspotten.

Eine Möglichkeit ist es, die Ebene zu verspotten, die ich über BigQuery selbst geschrieben habe, aber ich bevorzuge es, BigQuery auf eine natürlichere Weise zu verspotten. Ich suche nach einer eingeschränkten, leichtgewichtigen Implementierung, die es ermöglicht, den Tabelleninhalt zu definieren und Abfragen unter Verwendung der Standard-API zu unterstützen. Gibt es eine solche Bibliothek? Wenn nicht, welche alternativen Ansätze werden empfohlen?

    
Eyal Schneider 15.09.2016, 09:35
quelle

1 Antwort

4

Beim Komponententest ist es völlig in Ordnung, alle externen Abhängigkeiten nachzuahmen, und solange Sie den Zugriff auf den BigQuery-Client mit Hilfe von Schnittstellen abstrahieren, sollte Mocking kein Problem darstellen.

Bei Integrationstests würde ich lieber alle Abhängigkeiten meiner Drittanbieter testen lassen soweit eine Anwendung es braucht.

Ein Fall wäre beispielsweise ein ETL, der Daten aus externen Quellen nach BigQuery streamt. In diesem Fall muss ein Integrationstest sicherstellen, dass alle Daten wie erwartet in BigQuery vorliegen. Dies bedeutet, dass die Verifikationsstufe wiederholte, und verschachtelte Nachrichten nach Bedarf.

Ein anderer Fall wäre eine Anwendung, die einige Business-SQL-Anweisungen ausführt. In diesem Fall müssten Sie BigQuery vor dem Ausführen der Anwendung mit einigen Testdaten füllen. dann muss die Anwendung die SQL-Ausgabe entweder als Ansicht / neue Tabelle veröffentlichen oder aus Daten zur Verifizierung streamen.

Es gibt bereits einige Bibliotheken, die sich um Integrationstests mit Datenspeichern einschließlich BigQuery / NoSQL / SQL

kümmern

Sie würden eine einfache Lösung für die oben beschriebenen Fälle und vollständige Unterstützung für SQL, dynamisches Makro / Prädikat usw. bieten.

  1. Dsunit (go-lang)
  2. JDsunit (Java)

Wenn die Testbibliothek für die Datenspeicherintegration keine Option für Sie ist und Sie nur den BigQuery-Client testen möchten, ist die gute Nachricht, dass der Client REST verwendet. Mithilfe von Netzwerk-Sniffern können Sie einfach aufzeichnen, was gesendet wird. Dann kannst du es im Replayer verwenden. Um BigQuery umzuleiten öffentliche BG-Endpunkte zu Ihrem Replayer würden Sie http-Java-Proxy verwenden.

    
Adrian Witas 20.09.2016 05:26
quelle