La meilleure façon de vérifier si un certain type d'exception a été la cause (d'une cause, etc ...) dans un nested exception?

Je suis en train d'écrire quelques JUnit tests qui permettent de vérifier qu'une exception de type MyCustomException est levée. Toutefois, cette exception est enveloppé dans d'autres exceptions, un certain nombre de fois, par exemple dans un InvocationTargetException, qui à son tour est enveloppé dans une RuntimeException.

Quelle est la meilleure façon de déterminer si MyCustomException en quelque sorte causé l'exception que j'ai fait attraper? Je voudrais faire quelque chose comme ceci (voir souligné):


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

Je voudrais éviter d'appeler getCause() un peu de "couches" de profondeur, et similaire laide des solutions de rechange. Est-il plus agréable?

(Apparemment, le Printemps a NestedRuntimeException.contient du(de la Classe), qui fait ce que je veux, mais je ne suis pas à l'aide de Printemps.)

FERMÉ:
OK, je suppose que il n'y a vraiment pas de se déplacer à une méthode utilitaire 🙂 Merci à tous ceux qui ont répondu!

OriginalL'auteur Yang Meyer | 2009-03-04