2016-05-16 27 views
0

Ich versuche, Wiremock, um eine 200-Status mit einer einfachen Anfrage in meinem Unit-Tests zurückzukehren, aber diese Einheit Test gibt immer einen Fehler 404 zurück.Wiremock Tests erhalten immer eine 404 auf einfache Anfrage

Wie kann das gelöst werden?

import static com.github.tomakehurst.wiremock.client.WireMock.*; 
import static org.junit.Assert.assertTrue; 

import com.github.tomakehurst.wiremock.junit.WireMockRule; 
import org.junit.Rule; 
import org.junit.Test; 

import java.net.HttpURLConnection; 
import java.net.URL; 

public class WiremockTest { 

@Rule 
public WireMockRule wireMockRule = new WireMockRule(8089); // No-args constructor defaults to port 8080 

@Test 
public void exampleTest() throws Exception { 
    stubFor(get(urlPathMatching("/my/resource[0-9]+")) 
      .willReturn(aResponse() 
        .withStatus(200) 
        .withHeader("Content-Type", "text/xml") 
        .withBody("<response>Some content</response>"))); 

    int result = sendGet("http://localhost/my/resource/121"); 
    assertTrue(200 == result); 

    //verify(getRequestedFor(urlMatching("/my/resource/[a-z0-9]+"))); 
} 

private int sendGet(String url) throws Exception { 
    URL obj = new URL(url); 
    HttpURLConnection con = (HttpURLConnection) obj.openConnection(); 

    // optional default is GET 
    con.setRequestMethod("GET"); 

    int responseCode = con.getResponseCode(); 
    return responseCode; 

} 
} 
} 

Antwort

1

Ihre bereitgestellten Code verwenden, hatte ich zuerst die java.net.ConnectionException zu handhaben, die ausgelöst wurde. Die URL Ihres Tests benötigt den Port auf localhost.

Danach denke ich, dass der Grund, warum Sie eine 404 erhalten, ist, dass Ihre Regex nicht Ihre Test-URL entspricht.

urlPathMatching("/my/resource[0-9]+")

sollte

urlPathMatching("/my/resource/[0-9]+")

beachten Sie die zusätzlichen Pfadseparator zwischen 'Ressource' und '[0-9] +'

Online-Tools für regex Tests wie regex101 können verwendet werden, um Mustervergleichsverhalten zu testen. (Denken Sie daran, Ihre Schrägstriche zu entkommen)

Muster: \/my\/resource\/[0-9]+

Test-String: http://localhost:8089/my/resource/121

Hoffnung, das hilft!

+0

Wenn ich den Port auf 8089, funktioniert es gut. Für das Gesamtbild habe ich jedoch einen eingebetteten Tomcat Server, der während meiner Komponententests ausgeführt wird. Und wenn ich der Wiremock-Regel denselben Port wie dem Tomcat-Server gebe, erhalte ich einen verbindlichen Fehler, da der Port bereits vom Tomcat-Server verwendet wird. Gibt es eine Möglichkeit, dies für Anfragen in den Tomcat-Port zu arbeiten? – dwardu

+1

Mit der Standard-Wiremock-Regel glaube ich nicht, dass das, was Sie fragen, im Kontext von Junit erledigt werden kann. Es kann andere Optionen geben, aber ich kenne diesen Kontext nicht wirklich. Mein bester Vorschlag wäre, die Dokumentation über das Drahtgeflecht durchzugehen und zu überprüfen, ob etwas zu Ihrem Anwendungsfall passt. http://wiremock.org/getting-started.html – Jeremiah