我有一段代碼可以通過 WebClient 發送請求:
public String getResponse(String requestBody){
...
final WebClient.RequestHeadersSpec<?> request =
client.post().body(BodyInserters.fromValue(requestBody));
final String resp =
req.retrieve().bodyToMono(String.class)
.doOnError(
WebClientResponseException.class,
err -> {
// do something
throw new InvalidRequestException(err.getResponseBodyAsString());
})
.block();
...
}
從代碼中,看起來InvalidRequestException會在WebClientResponseException發生時拋出。但是,測驗會拋出.WebClientResponseException而不是InvalidRequestException.
這是我為涵蓋該部分而撰寫的單元測驗.doOnError部分。我嘗試了以下方法:
...
when(webClientMock.post()).thenReturn(requestBodyUriMock);
when(requestBodyUriMock.body(any())).thenReturn(requestHeadersMock);
when(requestHeadersMock.retrieve()).thenReturn(responseMock);
when(responseMock.bodyToMono(String.class)).thenThrow(new WebClientResponseException(400, "Bad Request", null, null, null));
try {
String result = someServiceSpy.getResponse(requestBody);
} catch (InvalidRequestException e) {
assertEquals(expectedCode, e.getRawStatusCode());
}
uj5u.com熱心網友回復:
解決方案是我需要將例外包裝進去Mono.error,,然后doOnError觸發。
when(responseMock.bodyToMono(String.class)).thenReturn(Mono.error(thrownException));
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/528963.html
