簡體   English   中英

未在 flatMap 內映射的異常

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM