我正在尝试测试openid提供程序类.openid消费者类正在发出http请求.我正在使用wiremock模拟对此请求的响应.我试图模拟一个有效的openid响应.但是,有效响应取决于请求参数.使用wiremock,我可以设置一个模拟请求,其中响应的主体依赖于请求参数吗?
Pie*_*syP 10
这是可能的,你只需要使用ResponseTansformer.在下面的示例代码中,responseDefinition由下面给出的存根确定.在这里,我通过简单地将主体字节返回给调用者来模拟编码服务.虽然在变压器中,我可以根据请求的内容自由返回任何我喜欢的内容.
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)));
Run Code Online (Sandbox Code Playgroud)
Wiremock支持您自己编写的扩展,它们充当用于拦截请求和响应主体的中间件,因此您可以根据需要对其进行格式化.它非常灵活,允许您动态组成新的响应主体,甚至根本没有响应.
例如,我们在Opentable上为此编写了一个扩展,并在Maven Central上开源.它允许您将json属性视为变量并将它们插入到响应主体中.看看这个.让我们知道它是怎么回事,或者如果您有任何问题. https://github.com/opentable/wiremock-body-transformer