Ich habe etwas Erfahrung mit Komponententests und Mocks. In meiner begrenzten Erfahrung würde ich die beiden verwenden, um eine Service-Schicht zu testen, zum Beispiel, um die Datenbank zu verspotten (stubbing?), Um Abhängigkeiten zu beseitigen und sich auf Unit-Tests der Geschäftslogik zu konzentrieren.
Jetzt erstelle ich eine Wrapper-API-Implementierung, die REST-konforme Webdienste in Anspruch nimmt. Die JSON-Ergebnisstruktur, die an mich zurückgeschickt wird, liegt nicht in meiner Hand, zum Beispiel: Twitter. Ich baue einfach den Klienten auf, um mit ihrer API zu verbinden. Ich bin mir nicht sicher, wie man das JSon-Ergebnis testen kann. Gerade jetzt verspotte ich nur das Ergebnis der http-Anfrage mit einer statischen json-Struktur. Dies stellt sicher, dass das Deserialisieren von Json zu meinen Pojos korrekt ist, aber ich bin besorgt über API-Änderungen. Was passiert, wenn sich die API-Struktur ändert? Was ist, wenn die API heute "Titel" und "Groovy_title" morgen zurückgibt? Mein Komponententest würde das nicht verstehen.
Aber von meinem Verständnis her - Unit Tests sollen schnell sein. Zuvor würde ich die DB verspotten und jetzt verspotte ich http, aber sollte ich tatsächlich die konkrete http-Implementierung verwenden, so dass ich sofort von einer brechenden API-Änderung benachrichtigt werde? Oder gibt es einen besseren Weg, sich dieser Situation zu nähern?
Ich würde weiterhin das tun, was Sie tun, und die Schnittstelle zwischen Ihrem Code und der externen API vortäuschen. Wie Sie feststellen, erkennt dies keine Änderungen in der externen API.
Sie könnten Integration -Tests schreiben, die tatsächlich auf den externen Server gehen, um API-Änderungen zu testen. Ich vermute, dass Sie den Code, der die Interaktion in seinem eigenen Server / Modul durchführt, getrennt haben, so dass Sie die externe API buchstäblich anpingen können, ohne durch mehr als 1 Abstraktionsschicht in Ihrer App behindert zu werden.
Hinweis: Sie können diese Tests erstellen, ohne Ihren App-Code zu verwenden. d. h. wget oder curl und eine Analyse der Ergebnisse durchführen ...
Die Probleme damit sind zahlreich; aus dem Kopf:
Sie benötigen eine Netzwerkverbindung
Langsamer
Der externe Dienst könnte zeitweilig ausfallen - d. H. Fehler könnten verschiedene Dinge bedeuten.
usw.
Tags und Links unit-testing json rest mocking