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

最佳答案

这是可能的,您只需要使用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)));

10-07 19:51
查看更多