代码: -
try {
Assert.assertEquals("1", "2");
} catch (Exception e) {
System.out.println("I am in error block");
}
如果断言语句失败,我想捕获catch块中的错误。我正在尝试使用上面的代码并且没有发生。
在java异常的catch块中是否会捕获断言错误?
答案 0 :(得分:45)
你几乎回答了自己的问题。如果AssertionError
失败,那么你的catch块将不会捕获Assert
抛出的Error
,因为它是java.lang.Error
(或者更具体地说,它扩展为Throwable
)。 See the docs了解有关此内容的更多信息。您的catch块仅捕获扩展java.lang.Exception
catch (AssertionError e) {
...
个对象
如果你真的想抓住它 - 你需要使用
Error
然而 ,因为others有mentioned,这是一种非常不寻常的使用断言的方式 - 它们通常应该通过,如果它们失败了你想要继续执行程序是非常不寻常的。这就是失败引发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)
如果您想同时捕获Exception
和Error
实例,请使用:
...
catch (Throwable t)
{
...
}
由于Exception
和Error
都扩展了Throwable
。