首页 > 解决方案 > reactor + Mockito 存根中的重试机制

问题描述

考虑以下代码片段:

@Scheduled(...)
public void cleanUpDbs() {
    fooRepository.deleteAll()
        .retryWhen(Retry.backoff(3, Duration.ofSeconds(2)))
        .doOnError(log::error)
        .block();
     
}

和单元测试:

@Test
void cleanUp_IsRetriedWhenErrorOccurs() {
    
    when(fooRepository.deleteAll())
        .thenReturn(Mono.error(new IllegalArgumentException()))
        .thenReturn(Mono.error(new IllegalArgumentException()))
        .thenReturn(Mono.empty());

    dbsCleanupService.cleanUp();

    verify(fooRepository, times(3)).deleteAll();
}

请不要介意阻塞行为,我知道,它是每天午夜运行一次的预定方法的一部分。如果有人能解释我为什么总是考虑第一个存根,而忽略第二次和第三次调用,我将不胜感激?所以测试失败,最大重试次数用尽,因为它总是使用相同的源(Mock 中的第一个 thenReturn()) 我怎样才能让它重新订阅/调用,以便每次重试都会进行新的调用?

标签: javamockitoreactor

解决方案


推荐阅读