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

标签 java junit try-catch assert

代码:-

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.ExceptionThrowable 对象

如果你真的想捕获它 - 你需要使用

catch (AssertionError e) {
...

然而,如 othersmentioned ,这是使用断言的一种非常不寻常的方式——它们通常应该通过,如果它们失败,那么你想要继续执行程序是非常不寻常的。这就是失败抛出 Error 而不是 Exception 的原因。您可以在 this question 中阅读有关(不)捕获 Error 的更多信息。 .

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

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

关于java - java异常的catch block 中是否会捕获断言错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29671796/

相关文章:

c# - 要捕获的参数?

通过 try block 处理 Swift 2.2 错误

java - 指定 ThreadPoolExecutor 问题

java - 如何读取和下载存储在Bucket中的文件?

java - 之前的注释缺少属性值的值

testing - Dropwizard 集成测试与 DB 模拟

java - 如何使 Ant junit 任务仅在测试失败时显示详细信息?

java - 将时间对象持久化为实体而不是值类型?

java - Powershell 静默安装 Java

r - 使用 tryCatch 在 R 中加载数据文件