Я хотел бы, чтобы следующий метод генерировал настраиваемое исключение в случае возникновения ошибки:
@Service
public class MyClass {
private final WebClient webClient;
public MatcherClient(@Value("${my.url}") final String myUrl) {
this.webClient = WebClient.create(myUrl);
}
public void sendAsync(String request) {
Mono<MyCustomResponse> result = webClient.post()
.header(HttpHeaders.CONTENT_TYPE, "application/json")
.body(BodyInserters.fromObject(request))
.retrieve()
.doOnError(throwable -> throw new CustomException(throwable.getMessage()))
.subscribe(response -> log.info(response));
}
}
Я также настроил модульный тест, ожидая выброса CustomException. К сожалению, тест не проходит, и исключение как бы обернуто в объект Mono. Вот также тестовый код для справки:
@Test(expected = CustomException.class)
public void testSendAsyncRethrowingException() {
MockResponse mockResponse = new MockResponse()
.setHeader(HttpHeaders.CONTENT_TYPE, "application/json")
.setResponseCode(500).setBody("Server error");
mockWebServer.enqueue(mockResponse);
matcherService.matchAsync(track);
}
Я использую MockWebServer, чтобы имитировать ошибку в тесте.
Итак, как мне реализовать часть doOnError или onError, если вызов, чтобы мой метод действительно генерировал исключение?