WireMock不会转换响应

时间:2018-11-02 14:01:28

标签: wiremock

我在使用WireMock时遇到问题,我扩展了ResponseTransformer并实现了所有必需的方法,看起来像这样:

public class TempResponseTransformer extends ResponseTransformer {

    @Override
    public Response transform(Request request, Response response, FileSource fileSource,
                              Parameters parameters) {
        return Response.Builder.like(response).but().status(404).body("1").build();
    }

    @Override
    public boolean applyGlobally() {
        return false;
    }

    @Override
    public String getName() {
        return "temp-response-transformer";
    }
}

现在,我想将此特定的转换器应用于我写的一个存根,存根看起来像这样:

private static void initTempStub() {
    stubFor(post(urlPathEqualTo("/api/v1/temp"))
            .withHeader("AccessToken", matching("[a-zA-Z0-9]+"))
            .withHeader("CliendID", matching("[a-zA-Z0-9]+"))
            .withHeader("ClientSecret", matching("[a-zA-Z0-9]+"))
            .willReturn(aResponse()
                    .withTransformers("temp-response-transformer")));
}

当我开始服务并执行后期呼叫时,我确实看到应用了转换器,但是响应实际上并未转换。 我也尝试在启动服务时在config部分中应用transformer,但这无济于事。

所以我的问题是我应该如何正确应用ReponseTransformer才能改变我的回答?

1 个答案:

答案 0 :(得分:0)

好吧,想想我已经知道了。 这是WireMock的问题(?),我可以在查看内部结构时弄清楚,这是我通过config的方式:

new WireMockServer(wireMockConfig()
.extensions(TempResponseTransformer.class)
.options().notifier(new ConsoleNotifier(true)))

此代码的一个问题是,当您从options()调用wireMockConfig时,它将创建WireMockConfig的新实例,因此我不得不将此配置提取到这样的单独代码段中:

    var wireMockConfig = new WireMockConfiguration();
    wireMockConfig
            .extensions(SamplesResponseTransformer.class)
            .notifier(new ConsoleNotifier(true));