Возникает ли ошибка утверждения в блоке catch для исключения Java?

Код: -

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

Если утверждения assert не работают, я хотел бы зафиксировать ошибку в блоке catch. Я пытаюсь использовать вышеуказанный код и его не происходит.

Будет ли ошибка утверждения обнаружена в блоке catch для исключения Java?

Ответы

Ответ 1

Вы почти ответили на свой вопрос. Ваш блок catch не будет перехватывать Error AssertionError которую Assert если он терпит неудачу, потому что это Error (или, более конкретно, она расширяет java.lang.Error). См. Документы для получения дополнительной информации об этом. Ваш блок catch ловит Throwable объекты Throwable которые расширяют java.lang.Exception

Если вы действительно хотите поймать это - вам нужно использовать

catch (AssertionError e) {
...

Однако, как уже упоминали другие, это очень необычный способ использования утверждений - они обычно должны проходить, и если они терпят неудачу, очень необычно для вас желание продолжать выполнение программы. Поэтому сбой выдает Error а не Exception. Вы можете прочитать больше о (не) ловле Error в этом вопросе.

Вы уверены, что не хотите просто проверить - if ( variableName == "1")?

Примечание: если вы тестируете вспомогательный код для юнит-тестирования, например, для сопоставления, может иметь смысл перехватить AssertionError.

Ответ 2

Хорошо, я считаю, что вы используете JUnit для написания тестов. В этом случае вы не должны ловить свой Assert.assertEquals(), потому что они должны пройти для обычного выполнения теста. Если он вызывает какое-либо исключение, это означает, что ваш код не работает так, как должен.

Ответ 3

Если вы хотите поймать ошибки таким образом, вам понадобится следующее:

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

Вы можете создать свой собственный класс исключения и передать нужное сообщение.

Ответ 4

Если вы хотите перехватывать экземпляры Exception и Error используйте:

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

Поскольку и Exception и Error распространяются на Throwable.