首页 > 解决方案 > MockServer 以空的正文意外响应

问题描述

让我们看一个测试,它使用 MockServer ( org.mock-server:mockserver-netty:5.10.0) 来模拟响应。

预计响应正文将等于 string "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(...)

标签: javamockservermockserver-netty

解决方案


问题出在客户端。它会丢弃内容。

为什么!?

因为,HTTP 205RESET_CONTENT。这个状态被意外选择为“不同于 HTTP 200 的东西”进行测试,不幸的是导致了这种行为。看起来这是一个非常流行的“意外”错误(即此处),尽管它严格按照HTTP 规范


推荐阅读