[英]Exception in not mapped inside flatMap
我有一段代碼調用外部服務。 我想從這個服務映射錯誤。 我試圖這樣做:
public Mono<Void> patch(String userId, Payload payload) {
return Mono.just(payload)
.flatMap(it -> client.patch(userId, PatchRequest.buildRequest(payload, userId))
.onErrorMap(throwable -> GeneralActionException.ofFailedSetup()));
}
但是當我嘲笑客戶端返回 RuntimeException
Mockito.when(client.patch(any(), any())).thenThrow(new RuntimeException());
結果是我的測試:
StepVerifier.create(sut.patch(userId, payload))
.verifyError(GeneralActionException.class);
失敗,因為返回的錯誤是 RuntimeException:
但是,當我稍微更改代碼時,就像這樣:
public Mono<Void> patch(String userId, Payload payload) {
return Mono.just(payload)
.flatMap(it -> client.patch(userId, PatchRequest.buildRequest(payload, userId)))
.onErrorMap(throwable -> GeneralActionException.ofFailedSetup());
}
結果證明測試成功了。 問題是為什么? 因為我不明白為什么它在這兩種情況下的工作方式不同,尤其是為什么在第一個示例中,當錯誤映射位於flatMap
內部時,它沒有將其映射到GeneralException
?
好的,我解決了。 我錯誤地嘲笑了客戶。 代替:
Mockito.when(client.patch(any(), any())).thenThrow(new RuntimeException());
它應該是:
Mockito.when(client.patch(any(), any())).thenReturn(Mono.error(RuntimeException::new));
當客戶端返回Mono<Void>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.