Wiremock 入门教程3 - 自定义多个内部逻辑

2020-05-13  本文已影响0人  这个世界是虚拟的

0. 为什么需要定义多个内部逻辑

很显然, 外部接口有多种处理逻辑, 自然我们mock时需要多种逻辑

1. 环境搭配

传送门 : Wiremock + Spring reactor的简单集成测试

2. 写第一个自定义mock内部逻辑

Wiremock 自定义mock内部逻辑

3. 写多个自定义mock内部逻辑

我们注意到在上一篇 Wiremock 自定义mock内部逻辑 中, 我们有这一个接口

@Component
public class DummyWireMockConfigurationCustomizer implements WireMockConfigurationCustomizer {
    @Override
    public void customize(WireMockConfiguration config) {
        config.extensions(DummyResponseTransformer.class);
    }
}

这里的

config.extensions(DummyResponseTransformer.class)

实际是支持多个定义的Transformer, 那么我们只需要一个新的实现类再写入到接口实现即可

//和之前的Transformer 一样, 只是改了DUMMY_TRANSFORMER 为  "my_post_request_to_dummy_transformer"
@Slf4j
public class MyDummyResponseTransformer extends ResponseTransformer {

    static final String DUMMY_TRANSFORMER = "my_post_request_to_dummy_transformer";

    @Override
    public Response transform(Request request, Response response, FileSource fileSource, Parameters parameters) {
        String prefix = parameters.getString("prefix");

       //如果被调用,将会打印这一部分日志
        log.info("my_post_request_to_dummy_transformer : receive request id: {}, and prefix:{}", request.getBodyAsString(), prefix);
        String newId = prefix + request.getBodyAsString();
        return Response.response()
                .headers(new HttpHeaders(HttpHeader.httpHeader(org.springframework.http.HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)))
                .status(202)
                .body("{\"id\":\"" + newId + "\"}")
                .build();
    }

    @Override
    public String getName() {
        return DUMMY_TRANSFORMER;
    }

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

修改接口

@Component
public class DummyWireMockConfigurationCustomizer implements WireMockConfigurationCustomizer {
    @Override
    public void customize(WireMockConfiguration config) {
        config.extensions(DummyResponseTransformer.class, MyDummyResponseTransformer.class);
    }
}

4. 测试

    @Test
    void testMyTransformer() {

        stubFor(post(urlEqualTo("/change/id")).willReturn(aResponse()
                .withTransformers(MyDummyResponseTransformer.DUMMY_TRANSFORMER)
                .withTransformerParameter("prefix", "Hello_")));

        webTestClient
                .post()
                .uri("/test/transform")
                .bodyValue("666")
                .exchange()
                .expectStatus().isEqualTo(HttpStatus.OK)
                .expectBody(String.class)
                .consumeWith(stringEntityExchangeResult -> {
                    String responseBody = stringEntityExchangeResult.getResponseBody();
                    log.info(responseBody);
                    Assertions.assertEquals(responseBody, "{\"id\":\"Hello_666\"}");
                });

    }

运行测试, 查看日志是否打印

2020-05-13 17:46:53.521  INFO 28721 --- [qtp217930962-50] c.e.demo.MyDummyResponseTransformer      : my_post_request_to_dummy_transformer : receive request id: 666, and prefix:Hello_ ...

6. 源码

https://github.com/wallisnow/wiremock_spring_reactor

5. 总结

wiremock的自定义逻辑处理较为灵活, 我们可以根据需要来定义多个mock实现

上一篇下一篇

猜你喜欢

热点阅读