У меня есть метод, который иногда выдает исключение:
this.items[index] = element;
И у меня есть модульный тест, который утверждает, что исключение, которое должно быть сгенерировано, действительно выброшено:
try
{
doSomethingWithIndex(-1);
Assert.fail("should cause exception");
}
catch (IndexOutOfBoundsException expected)
{
Assert.assertNotNull(expected.getMessage());
}
Этот тест выполняется как часть непрерывной сборки, а иногда, иногда, происходит сбой, потому что getMessage () фактически возвращает ноль.Почему это случилось?Мой код никогда не может выдать исключение с пустым сообщением.
РЕДАКТИРОВАТЬ
Мой оригинальный пример кода вводил в заблуждение, генерируемое исключение на самом деле происходит от прямой индексации массива.Я могу воспроизвести то же поведение с пользовательским сгенерированным исключением, хотя.
Я добавил предложенный код:
catch (IndexOutOfBoundsException expected)
{
if (expected.getMessage() == null)
{
expected.printStackTrace();
}
Assert.assertNotNull(expected.getMessage());
}
В выводе консоли отсутствует трассировка стека в дополнение к причине.Вот полный вывод:
java.lang.ArrayIndexOutOfBoundsException