मैं एक विधि है कि कभी कभी एक अपवाद फेंकता है:Throwable.getMessage() कभी-कभी शून्य कैसे लौटाता है?
this.items[index] = element;
और मैं एक इकाई परीक्षण का दावा है कि कि अपवाद है कि फेंक दिया जाना चाहिए वास्तव में फेंक दिया जाता है है:
try
{
doSomethingWithIndex(-1);
Assert.fail("should cause exception");
}
catch (IndexOutOfBoundsException expected)
{
Assert.assertNotNull(expected.getMessage());
}
इस परीक्षण के रूप में चलाता है निरंतर निर्माण का हिस्सा और कभी-कभी, कभी-कभी यह विफल हो जाता है क्योंकि getMessage() वास्तव में शून्य हो जाता है। ऐसा क्यों होगा? मेरा कोड कभी भी एक नल संदेश के साथ अपवाद फेंक नहीं सकता है।
संपादित
मेरे मूल कोड उदाहरण भ्रामक था, फेंक दिया अपवाद वास्तव में सीधे एक सरणी को सूचीबद्ध करने से आ रहा है। मैं एक ही व्यवहार को एक कस्टम फेंक दिया अपवाद के साथ पुन: पेश कर सकता हूं।
catch (IndexOutOfBoundsException expected)
{
if (expected.getMessage() == null)
{
expected.printStackTrace();
}
Assert.assertNotNull(expected.getMessage());
}
सांत्वना उत्पादन कारण के अलावा स्टैक ट्रेस याद आ रही है:
मैं सुझाव कोड गयी। यहां पूर्ण आउटपुट है:
java.lang.ArrayIndexOutOfBoundsException
क्या आप सुनिश्चित हैं कि यह किसी अन्य चीज़ द्वारा फेंक दिया गया इंडेक्सऑटऑफबाउंड अपवाद नहीं है? मेरा सुझाव है कि आप इस पर आने पर 'अपेक्षित' के स्टैक ट्रेस को डंप करें। –
मैं जॉन के दूसरे सुझाव। यह न भूलें कि आप शायद एक ArrayIndexOutOfBoundsException या StringIndexOutOfBoundsException को पकड़ रहे हैं। –
@ टेड, @ जॉन: डिफ़ॉल्ट स्ट्रिंग इंडेक्सऑटऑफबाउंड अपवाद नहीं है और ArrayIndexOutOfBoundException उन्हें भेजे जाने पर एक संदेश उत्पन्न करता है? (जिस तत्व को आप एक्सेस करने का प्रयास कर रहे थे)? – amit