espresso之異常捕獲

當然和java的異常捕獲一樣嘛 , 但確實是一樣, 但也是有坑的.
先大體列一下java的異常機制
這裏寫圖片描述
這個層次圖先看着 , 後面就用着了

進入正題:
espresso需要捕獲異常無非是爲了繼續封裝 , 或是進行特殊操作.那麼如果tyr{…}catch(Exception e){}
捕獲不到呢 , 有了上面的圖想必你已經知道怎麼處理了 .
1. perform 時異常
android.support.test.espresso.NoMatchingViewException 這是perform時最常見的異常類
public final class NoMatchingViewException extends RuntimeException implements EspressoException
繼承關係圖:
這裏寫圖片描述
由此可見它是屬於Exception異常.

2. check 時異常
android.support.test.espresso.base.DefaultFailureHandler$AssertionFailedWithCauseError   這是一個異常類 ( check斷言失敗時拋出 )這是一個很常見的異常 他繼承自 AssertionFailedError
往上的繼承關係:
![這裏寫圖片描述](https://img-blog.csdn.net/20161024164620200)
上次有童鞋問我check封裝失效, 想來應該是用錯異常了.
so , check(...) 拋出的異常要用Error 才能捕獲
題外話:
這裏給個例子:
private static boolean checkRight(final ViewInteraction v,final ViewAssertion viewAssert){
        try{
            v.check(viewAssert);
            return true;
        }catch(Errore){
            Log.e(TAG,"checkRight:",e);
            return false;
        }
    }

The End
其他的異常就不列舉了 , 如有遇到通過如上方式處理即可.
當然也有終極方法 —- 直接catch Throwable 啊 ^-^

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章