Как протестировать метод, который повторяет попытку в Uni?JAVA

Программисты JAVA общаются здесь
Anonymous
Как протестировать метод, который повторяет попытку в Uni?

Сообщение Anonymous »

Я использую Quarkus, RESTEasy и Mutiny.
У меня есть метод, который вызывает клиент REST и повторяет попытки в случае сбоя.

Код: Выделить всё

class MyService {
private MyRestClient restClient;

public Uni fetchData() {
return restClient.fetchData()
.onFailure().retry().withBackOff(Duration.ofMillis(100), Duration.ofSeconds(5))
.atMost(5);
}
}
Я хочу проверить правильность повторных попыток, поэтому я написал этот тест:

Код: Выделить всё

@Test
public void shouldRetry() {
Mockito.when(restClient.fetchData())
.thenReturn(
Uni.createFrom().failure(new RuntimeException("Failed to fetch data")),
Uni.createFrom().item(Response.ok().build())
);

assertDoesNotThrow(() -> myService.fetchData().await().indefinetely());

Mockito.verify(restClient, Mockito.times(2)).fetchData();
}
Однако тест не пройден по утверждению «не выдает». Метод повторяет попытку правильно, но я считаю, что он не запускает новый вызов fetchData. Похоже, что он работает с тем же Uni, который был высмеян, чтобы вернуть исключение, вместо того, чтобы получить новый, который должен возвращать ответ OK. Таким образом, он постоянно получает ошибку. Либо это, либо я неправильно использую Mockito.
Он продолжает повторять попытки до пятой попытки, когда выдает IllegalStateException:

Код: Выделить всё

Suppressed: java.lang.IllegalStateException: Retries exhausted: 5/5
Кто-нибудь знает, как мне исправить этот тест, чтобы получить правильный результат? Или, может быть, проблема кроется в самом тестируемом коде?

Подробнее здесь: https://stackoverflow.com/questions/770 ... -on-an-uni

Вернуться в «JAVA»