【问题标题】:WireMock does not transform responseWireMock 不转换响应
【发布时间】:2018-11-02 14:01:27
【问题描述】:

我在使用 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")));
}

当我开始服务并执行 post 调用时,我确实看到应用了转换器,但响应实际上没有被转换。 我也尝试在启动服务时在配置部分应用变压器,但没有帮助。

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

【问题讨论】:

    标签: wiremock


    【解决方案1】:

    好的,我想我已经想通了。 这是 WireMock 的一个问题(?),我在查看内部时能够弄清楚,这是我通过配置的方式:

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

    此代码的一个问题是,当您从 wireMockConfig 调用 options() 时,它会创建 WireMockConfig 的新实例,因此我必须将此配置提取到单独的代码中,如下所示:

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

    【讨论】:

    • 如果您认为这是一个问题,请在 WireMock Github 页面上记录。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多