java - 检查某个异常类型是否是嵌套异常中的原因(原因等)的最佳方法?

标签 java spring exception nested-exceptions

我正在编写一些 JUnit 测试来验证 MyCustomException 类型的异常是否被抛出。但是,此异常多次包含在其他异常中,例如在 InvocationTargetException 中,而后者又被包装在 RuntimeException 中。

确定 MyCustomException 是否以某种方式导致我实际捕获的异常的最佳方法是什么?我想做这样的事情(见下划线):


try {
    doSomethingPotentiallyExceptional();
    fail("Expected an exception.");
} catch (RuntimeException e) {
     if (!e.wasCausedBy(MyCustomException.class)
        fail("Expected a different kind of exception.");
}

我想避免调用 getCause() 一些“层”深,以及类似的丑陋变通办法。有更好的方法吗?

显然,Spring 有 NestedRuntimeException.contains(Class) ,这是我想要的 - 但我没有使用 Spring。

最佳答案

如果您使用 Apache Commons Lang ,那么您可以使用以下内容:

(1) 原因应完全属于指定类型时

if (ExceptionUtils.indexOfThrowable(exception, ExpectedException.class) != -1) {
    // exception is or has a cause of type ExpectedException.class
}

(2) 当原因应该是指定类型或其子类类型时

if (ExceptionUtils.indexOfType(exception, ExpectedException.class) != -1) {
    // exception is or has a cause of type ExpectedException.class or its subclass
}

关于java - 检查某个异常类型是否是嵌套异常中的原因(原因等)的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/610628/

相关文章:

java - 如何使用 Jackson API 从 json 更新现有对象列表

java - Spring 缓存 - 出错时不缓存

worker 中的 Python 多处理和处理异常

没有堆栈溢出的 Java 正则表达式解析器

Java 不知道从哪里开始使用这个方法来获取元素周期表

java - 在java中根据循环顺序更改变量

java - 尽管用户名和密码正确,但登录表单抛出无效的用户名或密码

iphone - 应用程序崩溃,需要帮助理解错误

java - 在 PageViewer 中动态更新图像

java - LoginButton 中的 setFragment 无法应用于 MainFragment