Quarkus反应式链中onFailure未被调用问题咨询
问题分析与解决方案
核心原因
你遇到的问题根源在于Mockito的thenThrow是同步抛出异常,而serviceB.getSettings(id)方法预期返回Uni<SettingsResponse>类型的反应式对象。当你使用thenThrow时,调用该方法的瞬间就直接抛出了异常,完全没进入反应式链的onFailure处理流程,自然不会触发recoverWithItem逻辑。
解决方案
需要让Mockito返回一个已失败的Uni实例,而非直接同步抛出异常。修改测试代码如下:
Mockito.when(serviceB.getSettings(id)) .thenReturn(Uni.createFrom().failure(new NotFoundException("Not found test")));
这样serviceB.getSettings(id)返回的是一个处于失败状态的Uni,反应式链会正常流转到onFailure().recoverWithItem环节,执行你预设的默认SettingsResponse构建逻辑。
补充说明
Quarkus基于SmallRye Mutiny的反应式API中,onFailure系列操作符仅对反应式流内部的失败状态生效,不会捕获方法调用阶段的同步异常。只有当Uni本身标记为失败时,失败处理逻辑才会被触发。
内容的提问来源于stack exchange,提问作者nano_nano
相关产品推荐
相关产品推荐

