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

时间:2015-04-16 10:19:57

标签: java junit try-catch assert

代码: -

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

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

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

4 个答案:

答案 0 :(得分:45)

你几乎回答了自己的问题。如果AssertionError失败,那么你的catch块将不会捕获Assert抛出的Error,因为它是java.lang.Error(或者更具体地说,它扩展为Throwable)。 See the docs了解有关此内容的更多信息。您的catch块仅捕获扩展java.lang.Exception

catch (AssertionError e) { ... 个对象

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

Error

然而 ,因为othersmentioned,这是一种非常不寻常的使用断言的方式 - 它们通常应该通过,如果它们失败了你想要继续执行程序是非常不寻常的。这就是失败引发Exception而不是Error的原因。您可以在this question中详细了解(不)抓取if ( variableName == "1")

你确定你不只是想要一个测试 - AssertionError吗?

NB 如果你正在测试单元测试助手代码,比如匹配器,那么抓住{{1}}可能是有意义的。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

如果您想以这种方式捕获错误,则需要以下内容:

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

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

答案 3 :(得分:0)

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

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

由于ExceptionError都扩展了Throwable