2017-12-13 5 views
1

Szenario haben wir: -Bereitstellung stubbed Dateien über URLs in JUnit-Tests - wiremock

Wir haben ein Modul (in Java) mit JUnit zu testen. Das Modul nimmt grundsätzlich Dateien als Eingabe, verarbeitet sie und schreibt dann Daten in den Hazelcast. Diese Eingabedateien werden von einer internen URL heruntergeladen.

In unserem Junit-Test (vollständig ein separates Testprojekt, d. H. Junit-Test befindet sich nicht in dem zu testenden Modul), haben wir keinen Zugriff auf diese URL, wo diese Dateien residieren.

Problem: -

-> Um Eingabedateien für die Module zur Verfügung zu stellen, wird .properties-Datei verwendet, in dem es angegeben ist wehrt es physisch befindet. Das ist das InputFileUrl-Feld im Modul selbst.

-> Irgendwo in Modul wird diese URL gelesen (aus .properties Datei) und dann einige zusätzliche Parameter hinzugefügt werden. und dann versucht das Modul diese Url aufzurufen und lädt die Eingabedateien herunter. Von Testprojekt haben wir keinen Zugriff auf diese URL. so stellen wir diese Eingabedateien mit folgenden Statische Adresse der Datei:

InputFileUrl = file:///C:/Inputs/file.xml 

-> Das Problem ist, wenn einige zusätzliche Parameter, auf die oben URL im Modul hinzugefügt werden, natürlich wird es unvalid URL und wirft Ausnahme. Wir könnten das Modul erfolgreich aus unserem Testprojekt ausführen, wenn wir den Teil der Modulkommentare machen, in dem diese zusätzlichen Parameter hinzugefügt werden. (nur eine Linie commnet)

So 1) Wie können wir dieses URL-Zugangsproblem lösen, ohne den Modulcode selbst zu ändern?

Kann die WireMock-Technologie hier nützlich sein? Ich habe etwas darüber gelesen und bin mir nicht sicher, ob es für dieses Szenario nützlich sein kann, da hier die interne URL für das zu testende Modul abgespottet wird.

Antwort

0

Ja, mit Wiremock können Sie einen Stub-Server einrichten, der mit dem XML-Code antwortet, den Sie Ihrem Modul bereitstellen möchten. Also für den Test würden Sie einrichten

InputFileUrl = http://<wiremockurl> 

wiremockurl ist in der Regel „localhost“, obwohl Sie wiremock Standalone mit einer festen IP/Domain Name laufen kann.

Stubbing arbeitet dann wie folgt aus:

stubFor(get(urlEqualTo("/api/specific-resource")) 
    .willReturn(aResponse() 
     .withBody("<xml1>..<xml1>"))); 

Wie Sie im wiremock documentation lesen können, können Sie entweder die gleiche Antwort für viele zusätzliche Abfrageparameter zurückzukehren, oder Setup eine spezifische Antwort für bestimmte zusätzliche Abfrageparameter.

Sie können ein Wiremock einrichten, um mit denselben oder anderen Eigenschaften zu antworten, falls das Modul zusätzliche URL-Parameter hinzufügt.

+0

Vielen Dank für Ihre Antwort tkruse. Aber ich frage mich, was passiert, wenn in Modul selbst zusätzliche Parameter zur URL hinzugefügt werden? Ich meine die Methode in Modul für z.B. getInputFileUrl() gibt meine verspottete URL zurück und dann versucht die Methode, zusätzliche Parameter an diese anzuhängen (gemäß dem Code der Methode in Modul). Wie kontrolliere/vermeide ich das von meinem Test? getInputFileUrl wird nicht explizit aus meinem Test aufgerufen, sondern irgendwo intern aufgerufen ... – Ragini

+0

Ich habe weitere Details hinzugefügt – tkruse