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(...)?

1 ответ

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

Почему!?

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

Другие вопросы по тегам