MockServer неожиданно отвечает пустым телом

Давайте посмотрим на тест, который использует MockServer (org.mock-server:mockserver-netty:5.10.0) для имитации ответов.

Ожидается, что тело ответа будет равно строке "something". Тем не менее, этот тест не проходит, потому что тело ответа представляет собой пустую строку.

  @Test 
  void test1() throws Exception {

    var server = ClientAndServer.startClientAndServer(9001);

    server
        .when(
            request().withMethod("POST").withPath("/checks/"),
            exactly(1)
        )
        .respond(
            response()
                .withBody("\"something\"")
                .withStatusCode(205)
                .withHeader("Content-Type", "application/json")
        );

    HttpRequest request = HttpRequest.newBuilder()
                                     .uri(URI.create("http://localhost:9001/checks/"))
                                     .POST(BodyPublishers.noBody())
                                     .build();

    HttpResponse<String> response =
        HttpClient.newHttpClient().send(request, BodyHandlers.ofString());

    assertEquals(205, response.statusCode());
    assertEquals("something", response.body()); // fails
  }

Как сделать тело ответа равным строке, указанной в response().withBody(...)?


person diziaq    schedule 10.11.2020    source источник
comment
Может быть, проблема в том, что "something" не является допустимым JSON, как вы утверждаете с Content-Type? Кроме того, должно быть "\"something\"" - хоть вы говорите, что тело пустое.   -  person bimmlerd    schedule 10.11.2020
comment
строка является допустимым JSON по определению   -  person diziaq    schedule 10.11.2020


Ответы (1)


Проблема на стороне клиента. Он сбрасывает контент.

Почему!?

Потому что HTTP 205 это RESET_CONTENT. Этот статус был выбран случайно для тестирования как нечто отличное от HTTP 200 и, к сожалению, вызвал такое поведение. Похоже, это очень популярная случайная ошибка (например, здесь), хотя она строго в в соответствии с спецификацией HTTP.

person diziaq    schedule 10.11.2020