我正在编写一些JUnit测试,以验证是否抛出了类型MyCustomException
异常。但是,此异常多次包装在其他异常中,例如InvocationTargetException中,而InvocationTargetException又包装在RuntimeException中。
确定MyCustomException是否导致我实际捕获的异常的最佳方法是什么?我想做这样的事情(见下划线):
try {
doSomethingPotentiallyExceptional();
fail("Expected an exception.");
} catch (RuntimeException e) {
if (!e.原因(MyCustomException.class)
fail("Expected a different kind of exception.");
}
我想避免称呼getCause()
一些“层”较深的类似的变通方法。有更好的方法吗?
(显然,Spring具有NestedRuntimeException.contains(Class),它可以满足我的要求,但我没有使用Spring。)
关闭: 好的,我想实际上没有解决实用程序方法的问题:-)感谢所有回答!
你为什么要避免getCause
。当然,您可以为自己编写一种执行任务的方法,例如:
public static boolean isCause(
Class<? extends Throwable> expected,
Throwable exc
) {
return expected.isInstance(exc) || (
exc != null && isCause(expected, exc.getCause())
);
}
问题内容: 我在Spring中使用javax-validation和hibaernate-validator进行表单验证。除了用于Spring的基本必要JAR文件。 我包括: 验证API-1.1.0.Final hibernate-validator-5.1.0.Final 我读到某处也关注到了spl4j版本:所以我也告诉: 错误原因可以归因于slf4j和log4j兼容性吗? 我使用注释基础验证。
我正在获取dynamo db中的所有记录,对于每条记录,我都要对一个外部服务进行多线程调用。 但是我得到了这个错误: 嵌套异常是java.util.concurrent.executionException:org.springframework.web.client.HttpServererRoreXception:500 null] 编辑: 错误的完整堆栈跟踪: org.springframe
我有以下两个示例,我不清楚java.lang.Exception是如何处理的:作为检查的或未检查的异常。 以下方法编译成功: 在这里,我认为java.lang.Exception是威胁java.lang.RuntimeException或java.lang.Error。不处理也可以声明扔。 如果我们没有使用异常,而是使用了检查异常(它是java.lang.Exception的子类),那么您必须在方
我在sts中创建了一个maven项目,并试图为该项目创建一个war文件。我还为我的类配置了querydsl。当我运行maven install时,一个类给我一个错误响应。 错误:创建在文件[C:\ Users \ Vince \ Documents \ workspace-spring-tool-suite-4-4 . 0 . 1 . release \ project \ target \ te
问题内容: 我想捕获一个异常,该异常嵌套在另一个异常中。我目前正在这种方式: 有没有一种方法可以使此操作更高效,更优雅? 问题答案: 没有更优雅的方法来选择性地“捕获”嵌套异常。我想如果您做了很多这样的嵌套异常,就可以将代码重构为通用的实用程序方法。但是它仍然不会优雅或高效。 优雅的解决方案是消除异常嵌套。要么不首先将异常链接起来,要么(有选择地)解开包装并将嵌套的异常重新扔到堆栈的上方。 嵌套异
问题内容: 我想知道只有Integer.parseInt(无论如何)都不会失败的情况下才能做些什么。 更具体地说,我有一个jTextArea用户指定值,由换行符分隔。 我想检查每一行,看看是否可以转换为整数。 想出了类似的东西,但是不起作用: 任何帮助表示赞赏。 问题答案: