第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

防止 RxJava 將我的自定義異常包裝到復(fù)合異常中

防止 RxJava 將我的自定義異常包裝到復(fù)合異常中

郎朗坤 2023-07-19 17:00:11
我的任務(wù)是使用 RxJava 進行實現(xiàn),并以這種方式進行保護,如果發(fā)生任何錯誤,它就會被包裝到自定義異常中。問題是,無論我做什么,RxJavaPlugin 都會決定將我的異常包裝到 CompositeException 中,即使只有一個異常。哪個測試失敗。我已經(jīng)嘗試了在谷歌上可以找到的所有方法,直到實際覆蓋 RxJavaPlugin 的全局錯誤處理程序,但它忽略了嘗試的更改。在寫這篇文章時應(yīng)該拋出它的函數(shù)的實現(xiàn)Single<BigDecimal> summarizeConfirmedTransactions() throws SummarizationException {        try{            Observable<Transaction> observableTransactions = transactions.get()                    .doOnError(throwable -> {                        Exceptions.propagate(throwable);                    });            Observable<Confirmation> observableConfirmations = confirmations.get()                    .doOnError(throwable -> {                        Exceptions.propagate(throwable);                    });            return Observable.zip(observableTransactions, observableConfirmations, (t, c) -> new ConfirmableTransaction(t.transactionId, c.isConfirmed, t.value))                    .filter(confirmableTransaction -> confirmableTransaction.isConfirmed)                    .map(t -> t.value)                    .reduce(BigDecimal::add)                    .toSingle()                    .doOnError(throwable -> {                        Exceptions.propagate(throwable);                    });        }catch(Exception e)        {            throw new SummarizationException(e.getMessage());        }測試中的斷言失敗,因為最終拋出的異常是 CompositeException,其中包含單個異常。我需要讓它成為 SummarizationException.class非常感謝。
查看完整描述

2 回答

?
浮云間

TA貢獻1829條經(jīng)驗 獲得超4個贊

好吧,經(jīng)過更多的挖掘,并在朋友的幫助下,我成功地確定了任務(wù)的意圖:


我應(yīng)該在那里做的是:


Single<BigDecimal> summarizeConfirmedTransactions() throws SummarizationException {

  Observable<Transaction> observableTransactions = transactions.get();

  Observable<Confirmation> observableConfirmations = confirmations.get();


  return Observable.zip(observableTransactions, observableConfirmations,

    (t, c) -> new ConfirmableTransaction(c.isConfirmed, t.value))

      .filter(confirmableTransaction -> confirmableTransaction.isConfirmed)

      .map(t -> t.value)

      .reduce(BigDecimal::add)

      .toSingle()

      .onErrorResumeNext(th -> Single.error(new SummarizationException(th.getMessage())));

}

TL:DR 我不應(yīng)該將錯誤“包裝”到引發(fā)的異常中,而是將它們包裝到包含異常的錯誤響應(yīng)中。


查看完整回答
反對 回復(fù) 2023-07-19
?
嗶嗶one

TA貢獻1854條經(jīng)驗 獲得超8個贊

處理此問題的一種方法是在測試中使用 try-catch 塊,解開 CompositeException,然后斷言捕獲的異常。


fun testSummarizationException() {

    try {

        summarizeConfirmedTransactions()

    } catch (ex: Exception) {

        val customException = (ex as? CompositeException)?.exceptions?.get(0)

        //  assert to make sure thrown exception is of custom type

        assert(customException is SummarizationException)

    }

}

這是 CompositeException 被解包以獲取自定義異常的地方。


val customException = (ex as?CompositeException)?.exceptions?.get(0)


如果允許,異常會被類型轉(zhuǎn)換為 CompositeException。如果該類型不允許強制轉(zhuǎn)換,則將返回 null 并導致測試失敗。


查看完整回答
反對 回復(fù) 2023-07-19
  • 2 回答
  • 0 關(guān)注
  • 190 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號