2011-06-30 16 views
9

मैं एक विधि है कि कभी कभी एक अपवाद फेंकता है: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 
+3

क्या आप सुनिश्चित हैं कि यह किसी अन्य चीज़ द्वारा फेंक दिया गया इंडेक्सऑटऑफबाउंड अपवाद नहीं है? मेरा सुझाव है कि आप इस पर आने पर 'अपेक्षित' के स्टैक ट्रेस को डंप करें। –

+0

मैं जॉन के दूसरे सुझाव। यह न भूलें कि आप शायद एक ArrayIndexOutOfBoundsException या StringIndexOutOfBoundsException को पकड़ रहे हैं। –

+0

@ टेड, @ जॉन: डिफ़ॉल्ट स्ट्रिंग इंडेक्सऑटऑफबाउंड अपवाद नहीं है और ArrayIndexOutOfBoundException उन्हें भेजे जाने पर एक संदेश उत्पन्न करता है? (जिस तत्व को आप एक्सेस करने का प्रयास कर रहे थे)? – amit

उत्तर

1

जब यह शून्य संदेश है तो अपवाद के स्टैक ट्रेस को प्रिंट करने का प्रयास करें। यह संभव है कि कुछ अन्य कोड इसे फेंक दें। वास्तव में आप वास्तव में पिछले सरणी लंबाई तक पहुंचने की तरह।

0

आप ने लिखा है कि:

आप किसी भी 3 पार्टी पुस्तकालय yousing रहे हैं "मेरे कोड कभी नहीं एक अपवाद एक अशक्त संदेश के साथ फेंक कर सकते हैं"? मुझे लगता है कि मानक जावा कोड उपरोक्त इस तरह के अपवादों को कभी नहीं फेंकते हैं, लेकिन कुछ डालने वाले कोड को जार ... :)

+0

कोई तीसरी पार्टी पुस्तकालय नहीं। मैं अपने स्वयं के फेंकने वाले अपवादों के लिए यह "झटकेदार" व्यवहार देखता हूं और एक -1 इंडेक्स के साथ सीधे सरणी का संदर्भ देता हूं। –

संबंधित मुद्दे