Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用wiremock,我可以返回一个依赖于post请求的主体吗_Java_Junit - Fatal编程技术网

Java 使用wiremock,我可以返回一个依赖于post请求的主体吗

Java 使用wiremock,我可以返回一个依赖于post请求的主体吗,java,junit,Java,Junit,我正在尝试测试openid提供程序类。openid使用者类正在发出http请求。我正在使用wiremock模拟对此请求的响应。我试图模拟一个有效的openid响应。但是,有效响应取决于请求参数。使用wiremock,我可以设置一个模拟请求,其中响应主体取决于请求参数吗?我从未使用过wiremock。但根据他们的要求,您可以编写一个匹配URL和请求主体参数的模拟。因此,您应该能够根据URL本身或嵌入请求正文中的参数返回不同的mock。据我所知以及我使用WireMock的经验,没有 无法使用通过请求

我正在尝试测试openid提供程序类。openid使用者类正在发出http请求。我正在使用wiremock模拟对此请求的响应。我试图模拟一个有效的openid响应。但是,有效响应取决于请求参数。使用wiremock,我可以设置一个模拟请求,其中响应主体取决于请求参数吗?

我从未使用过wiremock。但根据他们的要求,您可以编写一个匹配URL和请求主体参数的模拟。因此,您应该能够根据URL本身或嵌入请求正文中的参数返回不同的mock。

据我所知以及我使用WireMock的经验,没有

无法使用通过请求传递的参数参数参数化响应。您所能做的最好的事情就是使用匹配器使模拟服务器做出相应的响应


我建议您使用纯jUnit进行一些单元或集成测试,以便在这种情况下测试请求/响应。如果您想测试收货请求是否正确响应,它们应该更快。我将WireMock视为进行验收测试的替代方案,以确保您与其他REST服务的接口不会被破坏。

我对此进行了大量调查,但答案是否定的(无论如何,到今天为止)


您需要为每个需要唯一响应的请求设置一个特定(静态)响应。

这是可能的,您只需要使用响应转换器。在下面的示例代码中,响应定义由下面给出的存根确定。这里,我通过简单地将正文字节返回给调用者来模拟编码服务。虽然在transformer中,我可以根据请求的内容自由返回任何我喜欢的内容

int port = 8080;
WireMockServer wireMockServer = new WireMockServer(new WireMockConfiguration().port(port).extensions(new ResponseTransformer() {
    @Override
    public ResponseDefinition transform(Request request, ResponseDefinition responseDefinition, FileSource files) {
        return new ResponseDefinitionBuilder().like(responseDefinition)
                .withBody(request.getBodyAsString().getBytes())
                .build();
    }

    @Override
    public String name() {
        return "request body returning request transformer";
    }
}));
wireMockServer.start();
WireMock.configureFor("localhost", port);

stubFor(post(urlEqualTo("/encode"))
        .willReturn(aResponse()
                .withHeader("Content-Type", "application/octet-stream")
                .withStatus(200)));

stubFor(post(urlEqualTo("/decode"))
        .willReturn(aResponse()
                .withHeader("Content-Type", "application/octet-stream")
                .withStatus(200)));

Wiremock支持您自己编写的扩展,这些扩展充当用于拦截请求和响应主体的中间件,因此您可以按照自己的喜好对其进行格式化。它非常灵活,允许您动态地构建新的响应主体,甚至完全不响应

例如,我们在Opentable上为此编写了一个扩展,并在Maven Central上对其进行了开源。它允许您将json属性视为变量,并将它们插入到响应体中。过来看。如果您有任何问题,请告诉我们进展如何。

是的,可以在wiremock中创建请求匹配的存根。 请求匹配请求的支持以下属性

  • 网址
  • HTTP方法
  • 查询参数
  • 标题
  • 基本身份验证(头匹配的特殊情况)
  • 饼干
  • 请求主体
  • 多部分/表单数据
在您的场景中,如果您希望对请求正文中的值应用匹配,您可以使用以下方法为其生成存根

{
  "request": {
    ...
    "bodyPatterns" : [ {
      "equalToJson" : "{ \"total_results\": 4 }"
    } ]
    ...
  },
  ...
}

按照链接查看更多详细信息:

我需要验证openid请求url的数字签名。我认为这不会起作用,所以我将研究另一个JavaHTTP服务器来实现它。