2011-06-30 18 views
9

私は時々例外をスローするメソッドがあります。なぜThrowable.getMessage()はnullを返すのですか?

this.items[index] = element; 

を私はスローされるべきでは実際にスローされる例外と主張ユニットテストがあります。

try 
{ 
    doSomethingWithIndex(-1); 
    Assert.fail("should cause exception"); 
} 
catch (IndexOutOfBoundsException expected) 
{ 
    Assert.assertNotNull(expected.getMessage()); 
} 

この試験は、として実行をgetMessage()が実際にnullを返すため、時には失敗することがあります。なぜこれが起こるのだろうか?私のコードはnullメッセージで例外をスローすることはできません。

EDIT

私の元のコード例では、スローされた例外は、実際に直接配列をインデックスから来て、誤解を招くでした。私はカスタム例外を投げても同じ振る舞いを再現できます。

私が提案したコードを追加しました:

catch (IndexOutOfBoundsException expected) 
{ 
    if (expected.getMessage() == null) 
    { 
     expected.printStackTrace(); 
    } 
    Assert.assertNotNull(expected.getMessage()); 
} 

コンソール出力が原因に加えて、スタックトレースが含まれていません。ここには完全な出力があります:

java.lang.ArrayIndexOutOfBoundsException 
+3

あなたは何か別のものによってスローされたIndexOutOfBoundsExceptionではないと確信していますか?私はあなたがこれを見いだしたときに 'expected'のスタックトレースをダンプすることを提案します。 –

+0

私はJonの提案を2度引用します。おそらくArrayIndexOutOfBoundsExceptionまたはStringIndexOutOfBoundsExceptionのいずれかをキャッチしていることを忘れないでください。 –

+0

@ Ted、@ Jon:デフォルトのStringIndexOutOfBoundExceptionおよびArrayIndexOutOfBoundExceptionはスローされたときにmsgを生成しませんか? (あなたがアクセスしようとしていた要素)? – amit

答えて

1

ヌルメッセージがあるときにスタックトレースの例外を印刷してみてください。それは他のコードがそれを投げる可能性があります。あなたが実際に過去の配列の長さにアクセスしているように。

0

あなたはそれを書いた: は

を「私のコードがnullのメッセージで例外をスローすることができません」あなたが任意のサードパーティのライブラリをがyousingていますか?私は標準のJavaコードは、上記のような例外をスローしないと仮定しますが、いくつかのpourlyコード化されたjar ... :)

+0

第三者のライブラリはありません。私は自分のスローされた例外と-1のインデックスを持つ配列を直接参照するためのこの "点滅"動作を参照しています。 –

関連する問題