2011-06-30 28 views
9

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ście
catch (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 
+3

Czy jesteś pewien, że nie jest to wyjątek IndexOutOfBoundsException wygenerowany przez coś innego? Proponuję zrzucić ślad stosu "oczekiwanego", gdy natkniesz się na to. –

+0

Po drugie sugestia Jona. Nie zapominaj, że prawdopodobnie przechwytujesz wyjątek ArrayIndexOutOfBoundsException lub StringIndexOutOfBoundsException. –

+0

@ 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

Odpowiedz

1

Spróbuj wydrukować stos śledzenia wyjątku, gdy ma on pusty komunikat. Możliwe, że inny kod go wyrzuci. Tak jak faktycznie uzyskujesz dostęp do wcześniejszej długości tablicy.

0

Napisałeś, że: „Mój kod może nigdy wyjątek z komunikatem” null

Czy yousing żadnych 3rd biblioteki strona? Zakładam, że standardowe kody java nigdy nie wyrzucają wyjątków takich jak powyższe, ale niektóre luźno zakodowane słoiki ... :)

+0

Brak bibliotek innych firm. Widzę to "migotanie" zachowanie dla moich własnych wyrzuconych wyjątków i odwoływanie się do tablicy bezpośrednio z indeksem -1. –

Powiązane problemy