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

Will an assertion error be caught by in a catch block for java exception?

代码:-

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

如果 assert 语句失败,我想在 catch 块中捕获错误。我正在尝试上面的代码,但它没有发生。

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

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

如果你想以这种方式捕获错误,你需要像下面这样的东西:

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

您可以创建自己的异常 class 并传入您想要的消息。

你几乎已经回答了你自己的问题。如果失败,您的 catch 块将不会捕获 Assert 抛出的 AssertionError,因为它是一个 Error(或者更具体地说,它扩展了 java.lang.Error)。 See the docs for more information on this. Your catch block only catches Throwable objects that extend java.lang.Exception

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

catch (AssertionError e) {
...

然而,如 have , this is a very unusual way to use assertions - they should usually pass and if they fail it is very unusual for you to want to carry on program execution. That's why the failure throws an Error rather than an Exception. You can read more about (not) catching Error in this question.

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

NB 如果你正在测试单元测试辅助代码,比如匹配器,那么捕获 AssertionError.

可能是有意义的

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

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

由于 ExceptionError 都扩展了 Throwable