如何对发出外部WebClient请求的类进行单元测试?

时间:2019-07-27 18:09:02

标签: spring-boot spring-webflux spring-test spring-webclient

我有一个@Service类,该类进行一些空检查,然后使用WebClient调用外部微服务。 Sonar抱怨此类未经测试,因为该方法未经过全面测试。问题是,我该如何模拟此调用或为此使用模拟服务器?我已经尝试过WebTestClient,但是似乎无法正常工作。

public Mono<CartResponse> someServiceCall(BarRequest barRequest)

//some null checks and random logic.

return WebClient.create("http://" + fooHostName)
                .post()
                .uri(uri)
                .body(Mono.just(barRequest), BarRequest.class)
                .exchange()
                .flatMap(serviceResponse -> {
                    if (serviceResponse.statusCode().is5xxServerError()) {

                        //some error logic
                        return Mono.just(barResponse);
                    }
                    return serviceResponse.bodyToMono(BarResponse.class);
                });

所以我不想真正打出这个电话,只希望它包含在测试中,所以我想对如何进行模拟或启动模拟服务器有一些见解。现在大约一天。

1 个答案:

答案 0 :(得分:0)

到目前为止,WebClient之类的RestTemplate嘲笑尚不支持。

在github上有一个未解决的问题。

Support of MockRestServiceServer for WebClient

Spring自己使用MockWebServer测试他们自己的代码,因此可以肯定地说这是一个可行的解决方案。