我有有時拋出異常的方法,包括:爲什麼Throwable.getMessage()偶爾會返回null?
this.items[index] = element;
我有斷言不同的是應該被拋出實際上是拋出一個單元測試:
try
{
doSomethingWithIndex(-1);
Assert.fail("should cause exception");
}
catch (IndexOutOfBoundsException expected)
{
Assert.assertNotNull(expected.getMessage());
}
此測試運行作爲連續構建的一部分,有時偶爾失敗,因爲getMessage()實際上返回null。爲什麼會發生?我的代碼永遠不會用空消息引發異常。
EDIT
我的原代碼的例子是誤導性的,被拋出的異常實際上是從直接索引的陣列來。儘管如此,我可以用自定義引發的異常來重現相同的行爲。
我添加建議的代碼:
catch (IndexOutOfBoundsException expected)
{
if (expected.getMessage() == null)
{
expected.printStackTrace();
}
Assert.assertNotNull(expected.getMessage());
}
控制檯輸出缺少除了原因堆棧跟蹤。以下是全部輸出:
java.lang.ArrayIndexOutOfBoundsException
你確定它不是由別的東西拋出的IndexOutOfBoundsException嗎?當你遇到這個問題時,我建議你轉儲'expected'的棧跟蹤。 –
我第二個喬恩的建議。不要忘記,您可能正在捕獲ArrayIndexOutOfBoundsException或StringIndexOutOfBoundsException。 –
@ Ted,@ Jon:是不是默認的StringIndexOutOfBoundException和ArrayIndexOutOfBoundException在被拋出時生成一個味精? (你試圖訪問的元素)? – amit