我在使用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
才能改变我的回答?
答案 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));