mam metodę, która czasami zgłasza wyjątek:Dlaczego Throwable.getMessage() czasami zwraca wartość null?
this.items[index] = element;
I mam badanej jednostki, która twierdzi, że wyjątek, który powinien być rzucony jest faktycznie rzucony:
try
{
doSomethingWithIndex(-1);
Assert.fail("should cause exception");
}
catch (IndexOutOfBoundsException expected)
{
Assert.assertNotNull(expected.getMessage());
}
Ten test jest wykonywany jako część ciągłej kompilacji i czasami, czasami kończy się niepowodzeniem, ponieważ getMessage() faktycznie zwraca wartość null. Dlaczego tak się stało? Mój kod nigdy nie może wyrzucić wyjątku z pustym komunikatem.
EDIT
Mój oryginalny przykładowy kod był mylący, rzucony wyjątek rzeczywiście pochodzące z bezpośrednio indeksowania tablicy. Mogę odtworzyć to samo zachowanie przy niestandardowym zgłoszonym wyjątku.
dodałem sugerowany kod:
wyjściecatch (IndexOutOfBoundsException expected)
{
if (expected.getMessage() == null)
{
expected.printStackTrace();
}
Assert.assertNotNull(expected.getMessage());
}
Konsola brakuje ślad stosu oprócz przyczyny. Oto pełna wydajność:
java.lang.ArrayIndexOutOfBoundsException
Czy jesteś pewien, że nie jest to wyjątek IndexOutOfBoundsException wygenerowany przez coś innego? Proponuję zrzucić ślad stosu "oczekiwanego", gdy natkniesz się na to. –
Po drugie sugestia Jona. Nie zapominaj, że prawdopodobnie przechwytujesz wyjątek ArrayIndexOutOfBoundsException lub StringIndexOutOfBoundsException. –
@ Ted, @ Jon: nie są domyślne StringIndexOutOfBoundException i ArrayIndexOutOfBoundException wygenerować msg, gdy są one zgłaszane? (element, do którego próbujesz uzyskać dostęp)? – amit