私は時々例外をスローするメソッドがあります。なぜ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
あなたは何か別のものによってスローされたIndexOutOfBoundsExceptionではないと確信していますか?私はあなたがこれを見いだしたときに 'expected'のスタックトレースをダンプすることを提案します。 –
私はJonの提案を2度引用します。おそらくArrayIndexOutOfBoundsExceptionまたはStringIndexOutOfBoundsExceptionのいずれかをキャッチしていることを忘れないでください。 –
@ Ted、@ Jon:デフォルトのStringIndexOutOfBoundExceptionおよびArrayIndexOutOfBoundExceptionはスローされたときにmsgを生成しませんか? (あなたがアクセスしようとしていた要素)? – amit