是否会在java异常的catch块中捕获到断言错误?

Gal*_*let 33 java junit assert try-catch

码:-

try {
    Assert.assertEquals("1", "2");
} catch (Exception e) {
    System.out.println("I am in error block");
}
Run Code Online (Sandbox Code Playgroud)

如果断言语句失败,我想捕获catch块中的错误.我正在尝试上面的代码,它没有发生.

是否会在java异常的catch块中捕获断言错误?

J R*_*ape 50

你差不多回答了自己的问题.如果失败,你的catch块将无法捕获抛出的AssertionError那个Assert,因为它是一个Error(或者更确切地说,它是扩展的java.lang.Error). 有关详细信息,请参阅文档.catch块只捕获Throwable扩展的对象java.lang.Exception

如果你真的想抓住它 - 你需要使用

catch (AssertionError e) {
...
Run Code Online (Sandbox Code Playgroud)

但是,正如其他人提到的,这是使用断言的一种非常不寻常的方式 - 它们通常应该通过,如果它们失败,那么你想要继续执行程序是非常不寻常的.这就是为什么失败会抛出一个Error而不是一个Exception.你可以阅读更多关于(不)抓住Error这一问题.

你确定你不只是想要一个测试 - if ( variableName == "1")

注意,如果您正在测试单元测试助手代码,比如匹配器,那么抓住它可能是有意义的AssertionError.

  • 当您想查看单元测试助手类是否在做正确的事情时(通过对其进行单元测试 ;-) ),人们希望能够捕获这样的 AssertionError。那将是捕获它的有效情况,不是吗? (2认同)

wil*_*mol 7

如果您想同时捕获ExceptionError实例,请使用:

...
catch (Throwable t)
{
...
}
Run Code Online (Sandbox Code Playgroud)

由于两者ExceptionError扩展Throwable