Chciałbym utworzyć test jednostkowy za pomocą pozornego serwera WWW. Czy istnieje serwer WWW napisany w Javie, który można łatwo uruchomić i zatrzymać na podstawie testu JUnit?Jak wyśmiać serwer WWW w celu testowania urządzenia w Javie?
Odpowiedz
Wypróbuj Simple (Maven) bardzo łatwo osadzić w teście jednostkowym. Wykonaj test RoundTripTest i przykłady, takie jak PostTest napisane za pomocą Simple. Podaje przykład umieszczenia serwera w teście.
Również Simple jest znacznie lżejszy i szybszy niż Jetty, bez zależności. Więc nie będziesz musiał dodawać kilku słoików do swojej ścieżki klas. Nie musisz też zajmować się WEB-INF/web.xml
ani innymi artefaktami.
Choć prawdopodobnie jest to, czego chciał użytkownik, nie jest to "fałszywy" serwer sieciowy, jest to rzeczywisty serwer sieciowy uruchamiany w ramach testu urządzenia.Na przykład, jeśli port zostałby zrobiony, to zawiedzie, więc nie jest to prawdziwa sztuczka (tj. Ma zewnętrzną zależność od systemu). Według nomenklatury Martina Fowlera ["Test Doubles"] (http://www.martinfowler.com/bliki/TestDouble.html) jest to "fałszywe". To powiedziawszy, było ** dokładnie ** to, czego szukałem. – ArtB
Czy ten projekt przestał działać? – kbolino
Spróbuj użyć urządzenia Jetty web server.
Czy próbujesz użyć serwera WWW mock or an embedded?
Dla mock serwer WWW, spróbuj użyć Mockito, lub coś podobnego, i po prostu mock HttpServletRequest
i HttpServletResponse
obiektów, takich jak:
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());
Dla osadzone serwer WWW, można użyć Jetty, które możesz use in tests.
Wystarczy popatrzeć na https://github.com/oharsta/priproba
Innym dobrym rozwiązaniem byłoby MockServer; zapewnia płynny interfejs, dzięki któremu można zdefiniować zachowanie wyśmiewanego serwera WWW.
Również MockServer zależy od Netty (nie Jetty). –
Wire Mock wydaje się oferować solidny zestaw kodów pośrednich i próbnych do testowania zewnętrznych usług internetowych.
@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));
}
Może również zintegrować ze spockiem. Znaleziono przykład here.
To zadziałało bardzo dobrze dla mnie. Korzystanie z metody wireMockConfig(). DynamicPort() sprawia, że jest bardziej przewidywalny w ustawieniach, w których inne programy mogą korzystać z portu. Szkoda, że to nie było domyślne, bo prawie przegapiłem tę możliwość i pominąłem tę wspaniałą bibliotekę. – morten
Co to jest testClient w podanym kodzie? – gribo
@gribo Przypuszczam, że testClient jest Twoją rzeczywistą instancją podczas testu. – Stephan
Możesz wypróbować Jadler (http://jadler.net), który jest biblioteką z płynnym, programistycznym interfejsem API języka Java, służącym do pośredniczenia i próbkowania zasobów HTTP w testach. Przykład:
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");
Próbowałem używać Jadler, ale gdy próbuję wywołać 'initJadler()' otrzymuję błąd jak wspomniano https://github.com/jadler-mocking/jadler/issues/107. Jakieś myśli, co może pójść źle? – tuk
Czy możesz wkleić wynik zależności mvn: drzewo tutaj? Może to być zderzenie bibliotek. –
Proszę przeczytać moją odpowiedź na github.com/jadler-mocking/jadler/issues/107, problem jest spowodowany zderzeniem wersji Jetty (8 vs 9). Możesz albo usunąć zależność Jetty9 (jeśli nie jest to konieczne do uruchomienia testu) lub uruchomić Jadler bez zależności Jetty9 (https://github.com/jadler-mocking/jadler/wiki/Using-the-Alternative-Stub-Server -Ustawienie) –
Można napisać makiety z HttpServer
klasy JDK, jak również (wymagane żadne zależności zewnętrzne). Zobacz: this blog post opisujące sposób.
Podsumowując:
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);
}
Czy istnieje sposób potwierdzenia, czy 'HttpServer' otrzymał żądanie? –
Jeśli używasz apache httpclient, to będzie dobrą alternatywą. HttpClientMock
HttpClientMock httpClientMock = new httpClientMock()
HttpClientMock("http://example.com:8080");
httpClientMock.onGet("/login?user=john").doReturnJSON("{permission:1}");
Pełne ujawnienie: Jestem autorem biblioteki.
- 1. Urządzenia iOS jako serwer WWW
- 2. serwer WWW Narzędzie do testowania obciążenia
- 3. Wbudowany w Javę serwer Kerberos do testowania
- 4. Jak wyśmiać Pythona datetime.now() w metodzie klasy do testowania jednostkowego?
- 5. Prosty serwer WWW w PHP
- 6. ładującego serwer WWW w Scala
- 7. Narzędzie do testowania/sprawdzania wydajności serwera WWW
- 8. Ionic jako serwer WWW
- 9. Automatyczne nabywanie licencji programisty w celu testowania urządzenia w sklepie Windows Store na serwerze kompilacji
- 10. Serwer WWW Dwscript
- 11. Jak wyśmiać UIApplication w Swift?
- 12. Mały serwer WWW
- 13. lekki serwer WWW Asyncio
- 14. Serwer SQL do testowania w Internecie
- 15. Prosty serwer WWW REST w doku kontenera
- 16. Używanie Django minus serwer WWW
- 17. Znajdowanie wycieków pamięci podczas testowania urządzenia iPhone
- 18. Czy w Mongo działa serwer WWW?
- 19. Jak wyśmiać żądanie AJAX?
- 20. widząc serwer WWW przez gniazdo. . .
- 21. C# NET HTTP.SYS serwer WWW
- 22. Regular Expression celu analizowania Hashtagi w Javie
- 23. Fałszywy serwer X do testowania?
- 24. Jak wysłać żądanie HTTPS przez serwer proxy w Javie?
- 25. Scala: jak osadzić mały serwer WWW w aplikacji scala?
- 26. Jak uruchomić wbudowany serwer WWW PHP w tle?
- 27. Jak zrestartować serwer WWW po błędzie uwierzytelnienia
- 28. Skonfiguruj folder testowy do testowania urządzenia w Androidzie studio
- 29. Jak wyśmiać prywatną zmienną dao?
- 30. Urządzenia nie zostały załadowane podczas testowania.
Zadanie wygląda bardziej jak tworzenie testu integracji, a nie test jednostkowy. –