【发布时间】:2016-09-16 13:08:56
【问题描述】:
我正在使用 JUnit 和 Hamcrest 进行一些自动化测试。为了使我的测试更具可读性,我想制作一个自定义匹配器,但是我在 matchesSafely 方法中调用的代码可能会引发异常。我不确定如何处理诸如matchesSafely的方法签名不允许抛出异常的异常。
举例说明:
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 声明了一个检查异常,我需要以某种方式处理它。我看到了两种可能的处理方式,但也许我忽略了一些东西:
- 捕获检查的异常并将其包装在运行时异常中,然后抛出该异常。
- 捕获已检查的异常并返回 false。实际上,我使用的是 TypeSafeDiagnosingMatcher,所以这里需要担心的是,对于两种可能的情况,不匹配描述应该(可能?)不同:空列表或抛出的异常。
在任何情况下,哪种方式是处理异常的最佳实践方式?
【问题讨论】: