Frage

Ich mag einen Unit-Test erstellen ein Mock-Webserver verwenden. Gibt es einen Web-Server in Java geschrieben, die leicht gestartet und gestoppt von einem JUnit-Testfall werden können?

War es hilfreich?

Lösung

Versuchen Sie Einfache ( Maven ) ist es sehr einfach in einen Komponententest einzubetten. Nehmen Sie die RoundTripTest und Beispiele wie die Posttest mit einfachen geschrieben. Bietet ein Beispiel, wie Sie den Server in Ihren Testfall einbinden.

Auch Einfach ist viel leichter und schneller als Jetty, ohne Abhängigkeiten. So werden Sie nicht mehr JAR-Dateien auf Ihren Classpath hinzufügen. Auch müssen Sie mit WEB-INF/web.xml oder anderen Artefakte betroffen sein.

Andere Tipps

Draht Mock scheint eine solide Reihe von Stubs zu bieten und spottet zum Testen externen Web-Service.

@Rule
public WireMockRule wireMockRule = new WireMockRule(8089);


@Test
public void exactUrlOnly() {
    stubFor(get(urlEqualTo("/some/thing"))
            .willReturn(aResponse()
                .withHeader("Content-Type", "text/plain")
                .withBody("Hello world!")));

    assertThat(testClient.get("/some/thing").statusCode(), is(200));
    assertThat(testClient.get("/some/thing/else").statusCode(), is(404));
}

Es kann auch mit spock integrieren. Beispiel gefunden hier .

Versuchen Sie, eine Mock oder eingebettet Webserver?

Für eine Mock Web-Server, versuchen Sie es mit Mockito , oder etwas ähnliches, und verspotten nur die HttpServletRequest und HttpServletResponse Objekte wie:

MyServlet servlet = new MyServlet();
HttpServletRequest mockRequest = mock(HttpServletRequest.class);
HttpServletResponse mockResponse = mock(HttpServletResponse.class);

StringWriter out = new StringWriter();
PrintWriter printOut = new PrintWriter(out);
when(mockResponse.getWriter()).thenReturn(printOut);

servlet.doGet(mockRequest, mockResponse);

verify(mockResponse).setStatus(200);
assertEquals("my content", out.toString());

Für eine eingebettet Web-Server, können Sie Jetty verwenden, die Sie können verwenden rel="noreferrer">.

Sie können ein Modell mit der HttpServer Klasse JDK schreiben als auch (keine externen Abhängigkeiten erforderlich). Siehe diese Blog-Post beschreibt, wie.

Zusammenfassung:

HttpServer httpServer = HttpServer.create(new InetSocketAddress(8000), 0);
httpServer.createContext("/api/endpoint", new HttpHandler() {
   public void handle(HttpExchange exchange) throws IOException {
      byte[] response = "{\"success\": true}".getBytes();
      exchange.sendResponseHeaders(HttpURLConnection.HTTP_OK, response.length);
      exchange.getResponseBody().write(response);
      exchange.close();
   }
});
httpServer.start();

try {
// Do your work...
} finally {
   httpServer.stop(0);
}

Eine weitere gute Alternative wäre MockServer ; es bietet eine fließend Schnittstelle, mit der Sie das Verhalten des verspottete Webserver definieren können.

Sie können versuchen, Jadler , die eine Bibliothek mit einer fließend programmatische Java API ist zu Stummel und Mock http Ressourcen in Ihren Tests. Beispiel:

onRequest()
    .havingMethodEqualTo("GET")
    .havingPathEqualTo("/accounts/1")
    .havingBody(isEmptyOrNullString())
    .havingHeaderEqualTo("Accept", "application/json")
.respond()
    .withDelay(2, SECONDS)
    .withStatus(200)
    .withBody("{\\"account\\":{\\"id\\" : 1}}")
    .withEncoding(Charset.forName("UTF-8"))
    .withContentType("application/json; charset=UTF-8");

Wenn Sie Apache Httpclient verwenden, Das wird eine gute Alternative sein. HttpClientMock

HttpClientMock httpClientMock = new httpClientMock() 
HttpClientMock("http://example.com:8080"); 
httpClientMock.onGet("/login?user=john").doReturnJSON("{permission:1}");

Versuchen Sie, die Jetty Webserver verwendet wird.

Hier finden Sie aktuelle https://github.com/oharsta/priproba

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top