微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MockServer意外响应并显示为空

如何解决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(...)中提供的字符串相等?

解决方法

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

为什么!?

因为HTTP 205RESET_CONTENT。 意外将这种状态选择为“与HTTP 200不同”,不幸地导致了这种行为。 尽管它严格符合here,但看起来却是非常流行的“偶然”错误(即HTTP spec)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?