junit Assert错误会被java异常的catch块捕获吗?

gfttwv5a  于 2022-12-18  发布在  Java
关注(0)|答案(4)|浏览(289)

代码:-

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

如果assert语句失败,我想在catch块中捕获错误。我正在尝试上面的代码,但没有发生。
Assert错误会被java异常的catch块捕获吗?

yptwkmov

yptwkmov1#

您几乎已经回答了自己的问题。catch块将不会捕获Assert失败时抛出的AssertionError,因为它是Error(或者更具体地说,它扩展了java.lang.Error)。See the docs了解有关此问题的详细信息。catch块仅捕获扩展java.lang.ExceptionThrowable对象
如果你真的想抓住它-你需要使用

catch (AssertionError e) {
...

然而,由于othersmentioned,这是一种非常不寻常的使用Assert的方式-它们通常应该通过,如果它们失败了,你想继续执行程序是非常不寻常的。这就是为什么失败会抛出Error而不是Exception。你可以阅读更多关于(不)在this question中捕获Error的信息。

如果你只是想测试变量的值,最好使用if ( variableName == "1")

NB如果您正在测试单元测试帮助器代码,比如matcher,捕获AssertionError可能是有意义的。

ipakzgxi

ipakzgxi2#

如果要同时捕获ExceptionError示例,请用途:

...
catch (Throwable t)
{
...
}

因为ExceptionError都扩展了Throwable

hi3rlvi2

hi3rlvi23#

我相信您正在使用JUnit编写测试。在这种情况下,您不应该捕获Assert.assertEquals(),因为它们应该通过正常的测试执行。如果它抛出任何异常,则意味着您的代码没有按预期执行。

csbfibhn

csbfibhn4#

如果你想以这种方式捕捉错误,你需要类似下面的东西:

if (num == 1 || num == 2) {
    throw new Exception();
}

您可以创建自己的异常类并传入所需的消息。

相关问题