كيف للسخرية خادم الويب لاختبار وحدة في جافا؟
سؤال
وأود أن إنشاء وحدة الاختبار باستخدام خادم ويب وهمية. هناك خادم ويب مكتوب بلغة جافا والتي يمكن بسهولة بدأت وتوقفت من حالة اختبار أداة JUnit؟
المحلول
بسيط (و<لأ href = "http://search.maven.org/#search٪ 7Cga٪ 7C1٪ 7Cg٪ 3A٪ 22org.simpleframework٪ 22٪ 20A٪ 3A٪ 22simple٪ 22 "يختلط =" نوفولو noreferrer "> مخضرم ) من السهل جدا أن تغرس في وحدة الاختبار. خذ RoundTripTest وأمثلة مثل في والبعدي مكتوبة مع بسيطة. مثالا على كيفية تضمين الملقم في حالة الاختبار.
وأيضا بسيط هو أخف بكثير وأسرع من جيتي، مع عدم الاعتماد على. حتى أنك لن تضطر إلى إضافة العديد من الملفات جرة على CLASSPATH الخاص بك. ولا سيكون لديك لتكون قلقة مع WEB-INF/web.xml
أو أي غيرها من الأعمال الفنية.
نصائح أخرى
سلك موك يبدو لتقديم مجموعة قوية من بذرة ويسخر لاختبار خدمات الويب الخارجية.
@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));
}
ويمكن أن تتكامل مع سبوك كذلك. وجدت سبيل المثال هنا .
هل تحاول استخدام <م> همية م> أو جزءا لا يتجزأ من م> خادم الويب؟
لعلامة <م> وهمية م> خادم الويب، حاول استخدام Mockito ، أو شيئا من هذا القبيل، ومجرد سخرية من HttpServletRequest
وHttpServletResponse
الأشياء مثل:
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());
لعلامة <م> جزءا لا يتجزأ م> خادم الويب، هل يمكن استخدام جيتي ، التي يمكنك استخدامها في اختبارات .
ويمكنك إرسال وهمية مع الطبقة HttpServer
جدك وكذلك (عدم الاعتماد على الخارج المطلوبة). انظر هذا بلوق وظيفة و> تفاصيل كيفية القيام بذلك.
في الخلاصة:
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);
}
وبديل جيد آخر سيكون MockServer . فإنه يوفر واجهة بطلاقة والتي يمكنك تحديد سلوك خادم الويب سخر.
ويمكنك محاولة Jadler التي هي مكتبة مع بطلاقة برنامجي جافا API ل كعب والموارد HTTP وهمية في الاختبارات الخاصة بك. مثال:
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");
إذا كنت تستخدم اباتشي HttpClient وإصلاحه، وهذا سوف يكون بديلا جيدا. HttpClientMock
HttpClientMock httpClientMock = new httpClientMock()
HttpClientMock("http://example.com:8080");
httpClientMock.onGet("/login?user=john").doReturnJSON("{permission:1}");
وحاول استخدام جيتي خادم الويب .
وإلقاء نظرة على https://github.com/oharsta/priproba