我正在使用JUnit和Hamcrest進行一些自動化測試。爲了使我的測試更具可讀性,我想創建一個自定義匹配器,但是我在matchesSafely方法中調用的代碼可能會引發異常。我不確定如何處理這些異常,因爲matchesSafely的方法簽名不允許拋出異常。我應該如何處理自定義Hamcrest匹配器中的異常?
一個例子來加以說明:
public static Matcher<Session> hasObjectOfType(final Class<?> cls) {
return new TypeSafeMatcher<Session>() {
/* describeTo method skipped for brevity */
protected boolean matchesSafely(Session session) {
return session.provideList(cls.getName()).iterator().hasNext();
}
}
}
因此,這裏發生的事情是session.provideList聲明checked異常,我需要處理,不知怎的。我看到了兩種可能的方式來處理這個問題,但也許我忽略了一些東西:
- 捕獲檢查的異常並將其包裝在一個運行時異常中,然後拋出。
- 捕獲檢查的異常並返回false。實際上,我使用的是TypeSafeDiagnosingMatcher,因此這裏所關心的是對於兩種可能的情況,不匹配的描述應該不同(可能是?):空列表或拋出的異常。
在任何情況下,這將是處理異常的最佳實踐方式?