كيف للسخرية خادم الويب لاختبار وحدة في جافا؟

StackOverflow https://stackoverflow.com/questions/606352

  •  03-07-2019
  •  | 
  •  

سؤال

وأود أن إنشاء وحدة الاختبار باستخدام خادم ويب وهمية. هناك خادم ويب مكتوب بلغة جافا والتي يمكن بسهولة بدأت وتوقفت من حالة اختبار أداة 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());

لعلامة <م> جزءا لا يتجزأ خادم الويب، هل يمكن استخدام جيتي ، التي يمكنك استخدامها في اختبارات .

وبديل جيد آخر سيكون 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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top