java - 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()) 我怎样才能让它重新订阅/调用,以便每次重试都会进行新的调用?
解决方案
推荐阅读
- realm-list - 删除列表中的类
在领域迁移期间 - palantir-foundry - 如何在不使用 tranform 或 tranform_df 的情况下在 palantir Foundry 中导入单个数据集
- reactjs - react-firebaseui StyledFirebaseAuth 没有被编译
- visual-studio-code - 在vscode中如何向状态栏添加多个选项
- php - 如何在laravel中获取总和并分离每个ID的总数
- json - 谷歌识别的 JSON LD 格式的 Schema.org,但在网站控制台中显示错误
- compiler-errors - 为什么我的代码在混音时显示编译错误?
- sequelize.js - 为什么 Sequelize 为每个查询创建新连接?
- python - 将xml写入其中时如何删除数据框中的新行?
- websocket - WebSocket 连接到“wss://url”失败:未知原因