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.