Я использую Spring Cloud Stream , и суть моего приложения выглядит следующим образом:
@StreamListener(MySink.SINK_NAME)
fun processEvents(events: Flux<Event>) {
events.flatMap { event -> toEntities(event).toFlux() }
.flatMap(myRepository::store)
.doOnError { e -> log.error("Failed to store events", e) }
.retry(3)
.subscribe()
}
, где MyRepository
определяется следующим образом:
interface MyRepository {
fun store(entity: Entity): Mono<UpdateResult>
}
Я пытаюсь смоделировать сбой, чтобы убедиться, что повторная попытка действительно работает, и поэтому я создал @MockBean
из MyRepository
и сконфигурировал макет для первого выброса исключения:
given(myRepositoryMock.store(any())).willThrow(IllegalArgumentException("expected"))
.willReturn(Mono.just(UpdateResult.acknowledged(...)))
Но я не могу вызвать поведение повтора.Я вижу, что исключение действительно перехвачено и зарегистрировано:
java.lang.IllegalArgumentException: expected
Что я делаю не так?