Pergunta

Eu gostaria de criar um teste de unidade usando um servidor web simulada. Existe um servidor web escrito em Java que pode ser facilmente iniciado e interrompido a partir de um caso de teste JUnit?

Foi útil?

Solução

Tente simples ( Maven ) é muito fácil de incorporar em um teste de unidade. Leve o RoundTripTest e exemplos como o PostTest escrito com simples. Fornece um exemplo de como incorporar o servidor em seu caso de teste.

Também simples é muito mais leve e mais rápido do Pontão, sem dependências. Então você não terá que adicionar vários arquivos jar em seu classpath. Nem você vai ter que se preocupar com WEB-INF/web.xml ou quaisquer outros artefatos.

Outras dicas

fio Mock parece oferecer um sólido conjunto de tocos e simulações para testar os serviços web externos.

@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));
}

Pode integrar com Spock também. Exemplo encontrada aqui .

Você está tentando usar um simulada ou um incorporado servidor web ?

Para um simulada servidor web, tente usar Mockito , ou algo semelhante, e apenas zombar dos objetos HttpServletRequest e HttpServletResponse como:

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());

Para uma incorporada servidor web, você pode usar Jetty , que você pode em testes .

Você pode escrever um mock com classe HttpServer do JDK, bem como (dependências nenhuma externos necessário). Consulte este post detalhando como.

Em resumo:

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);
}

Outra boa alternativa seria MockServer ; ele fornece uma interface fluente com o qual você pode definir o comportamento do servidor web zomba.

Você pode tentar Jadler que é uma biblioteca com um fluente programática API Java para stub e zombar http recursos em seus testes. Exemplo:

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");

Se você estiver usando Apache HttpClient, isso vai ser uma boa alternativa. HttpClientMock

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

Tente utilizar o Jetty servidor web .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top