代码:-
try { Assert.assertEquals("1", "2"); } catch (Exception e) { System.out.println("I am in error block"); }
如果assert语句失败,我想在catch块中捕获错误。我正在尝试上面的代码,但没有发生。Assert错误会被java异常的catch块捕获吗?
yptwkmov1#
您几乎已经回答了自己的问题。catch块将不会捕获Assert失败时抛出的AssertionError,因为它是Error(或者更具体地说,它扩展了java.lang.Error)。See the docs了解有关此问题的详细信息。catch块仅捕获扩展java.lang.Exception的Throwable对象如果你真的想抓住它-你需要使用
Assert
AssertionError
Error
java.lang.Error
java.lang.Exception
Throwable
catch (AssertionError e) { ...
然而,由于others有mentioned,这是一种非常不寻常的使用Assert的方式-它们通常应该通过,如果它们失败了,你想继续执行程序是非常不寻常的。这就是为什么失败会抛出Error而不是Exception。你可以阅读更多关于(不)在this question中捕获Error的信息。
Exception
如果你只是想测试变量的值,最好使用if ( variableName == "1")
if ( variableName == "1")
NB如果您正在测试单元测试帮助器代码,比如matcher,捕获AssertionError可能是有意义的。
ipakzgxi2#
如果要同时捕获Exception和Error示例,请用途:
... catch (Throwable t) { ... }
因为Exception和Error都扩展了Throwable。
hi3rlvi23#
我相信您正在使用JUnit编写测试。在这种情况下,您不应该捕获Assert.assertEquals(),因为它们应该通过正常的测试执行。如果它抛出任何异常,则意味着您的代码没有按预期执行。
Assert.assertEquals()
csbfibhn4#
如果你想以这种方式捕捉错误,你需要类似下面的东西:
if (num == 1 || num == 2) { throw new Exception(); }
您可以创建自己的异常类并传入所需的消息。
4条答案
按热度按时间yptwkmov1#
您几乎已经回答了自己的问题。catch块将不会捕获
Assert
失败时抛出的AssertionError
,因为它是Error
(或者更具体地说,它扩展了java.lang.Error
)。See the docs了解有关此问题的详细信息。catch块仅捕获扩展java.lang.Exception
的Throwable
对象如果你真的想抓住它-你需要使用
然而,由于others有mentioned,这是一种非常不寻常的使用Assert的方式-它们通常应该通过,如果它们失败了,你想继续执行程序是非常不寻常的。这就是为什么失败会抛出
Error
而不是Exception
。你可以阅读更多关于(不)在this question中捕获Error
的信息。如果你只是想测试变量的值,最好使用
if ( variableName == "1")
NB如果您正在测试单元测试帮助器代码,比如matcher,捕获
AssertionError
可能是有意义的。ipakzgxi2#
如果要同时捕获
Exception
和Error
示例,请用途:因为
Exception
和Error
都扩展了Throwable
。hi3rlvi23#
我相信您正在使用JUnit编写测试。在这种情况下,您不应该捕获
Assert.assertEquals()
,因为它们应该通过正常的测试执行。如果它抛出任何异常,则意味着您的代码没有按预期执行。csbfibhn4#
如果你想以这种方式捕捉错误,你需要类似下面的东西:
您可以创建自己的异常类并传入所需的消息。