我正在编写一些JUnit测试,以验证是否抛出了类型MyCustomException异常。但是,此异常多次包装在其他异常中,例如InvocationTargetException中,而InvocationTargetException又包装在RuntimeException中。
MyCustomException
确定MyCustomException是否导致我实际捕获的异常的最佳方法是什么?我想做这样的事情(见下划线):
try { doSomethingPotentiallyExceptional(); fail("Expected an exception."); } catch (RuntimeException e) { if (!e.原因(MyCustomException.class) fail("Expected a different kind of exception."); }
我想避免称呼getCause()一些“层”较深的类似的变通方法。有更好的方法吗?
getCause()
(显然,Spring具有NestedRuntimeException.contains(Class),它可以满足我的要求,但我没有使用Spring。)
关闭: 好的,我想实际上没有解决实用程序方法的问题:-)感谢所有回答!
你为什么要避免getCause。当然,您可以为自己编写一种执行任务的方法,例如:
getCause
public static boolean isCause( Class<? extends Throwable> expected, Throwable exc ) { return expected.isInstance(exc) || ( exc != null && isCause(expected, exc.getCause()) ); }