代码:-
try {
Assert.assertEquals("1", "2");
} catch (Exception e) {
System.out.println("I am in error block");
}
如果断言语句失败,我想在 catch block 中捕获错误。我正在尝试使用上面的代码,但它没有发生。
断言错误会被 java 异常的 catch block 捕获吗?
最佳答案
您几乎已经回答了自己的问题。如果失败,您的 catch block 将不会捕获 Assert
抛出的 AssertionError
,因为它是一个 Error
(或者,更具体地说,它扩展java.lang.Error
)。 See the docs有关这方面的更多信息。您的 catch block 仅捕获扩展 java.lang.Exception
的 Throwable
对象
如果你真的想捕获它 - 你需要使用
catch (AssertionError e) {
...
然而,如 others有mentioned ,这是使用断言的一种非常不寻常的方式——它们通常应该通过,如果它们失败,那么你想要继续执行程序是非常不寻常的。这就是失败抛出 Error
而不是 Exception
的原因。您可以在 this question 中阅读有关(不)捕获 Error
的更多信息。 .
你确定你不只是想要一个测试 - if ( variableName == "1")
?
NB如果您正在测试单元测试帮助代码(如匹配器),捕获 AssertionError
可能是有意义的。
关于java - java异常的catch block 中是否会捕获断言错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29671796/