I am writing some JUnit tests that verify that an exception of type MyCustomException
is thrown. However, this exception is wrapped in other exceptions a number of
Why would you want to avoid getCause
. You can, of course, write yourself a method to perform the task, something like:
public static boolean isCause(
Class<? extends Throwable> expected,
Throwable exc
) {
return expected.isInstance(exc) || (
exc != null && isCause(expected, exc.getCause())
);
}
Based on Patrick Boos answer: If you using Apache Commons Lang 3 you can check:
indexOfThrowable: Returns the (zero based) index of the first Throwable that matches the specified class (exactly) in the exception chain. Subclasses of the specified class do not match
if (ExceptionUtils.indexOfThrowable(e, clazz) != -1) {
// your code
}
or
indexOfType: Returns the (zero based) index of the first Throwable that matches the specified class or subclass in the exception chain. Subclasses of the specified class do match
if (ExceptionUtils.indexOfType(e, clazz) != -1) {
// your code
}
Example for multiple types with Java 8:
Class<? extends Throwable>[] classes = {...}
boolean match = Arrays.stream(classes)
.anyMatch(clazz -> ExceptionUtils.indexOfType(e, clazz) != -1);