2010-10-29 16 views
11

दोस्तों, मुझे इस ज्यूनिट परीक्षण के लिए "विधि assertEquals (स्ट्रिंग, ऑब्जेक्ट, ऑब्जेक्ट) टाइप प्रकारटेस्ट" त्रुटि के लिए अस्पष्ट क्यों है?assertEquals दूसरे पैरामीटर कास्टिंग के बिना काम नहीं करता है

@Test 
public void testEditCard() { 
    Integer a = 10; 
    Integer b = 12; 
    Integer c = 2; 
    assertEquals("test", a-b, c); 
} 

कास्टिंग assertEquals("test", (Integer)(a-b), c); समस्या को हल करता है।

+0

नोट: वही समस्या और समाधान TestNG पर लागू होता है। – user905686

उत्तर

14
क्योंकि autoboxing और -unboxing के अजूबों में से

:

assertEquals("test", /* this is an int */ a-b, /* this is an Integer */ c); 

assertEquals(String, long, long); 
// in this case the second parameter is unboxed 
// (and the first one silently casted) 

के रूप में या

assertEquals(String, Object, Object); 
// in this case the first parameter is boxed 

के रूप में आप (पूर्णांक के रूप में सभी चर की घोषणा नहीं हैं मूल्यांकन किया जा सकता इंटीजर), कोई अस्पष्टता नहीं होनी चाहिए।

+2

मुझे एक ही समस्या है और मुझे इंटीजर की आवश्यकता है (int नहीं)। मुझे किस asserququals का उपयोग करना चाहिए ?? – Kayser

5

ऐसा इसलिए है क्योंकि संकलक यह नहीं बता सकता कि क्या आप assertEquals(String, Object, Object) या assertEquals(String, long, long) पर कॉल करना चाहते हैं। चूंकि a-b और c स्वचालित रूप से long पर ले जाया जा सकता है, तो संकलक एक अस्पष्टता को देखता है।

आपकी स्पष्ट कलाकार संकलक को बताती है कि आप ऑब्जेक्ट संस्करण चाहते हैं।

ध्यान दें कि इस मामले में आप चर के बजाय int का उपयोग कर सकते हैं जो अस्पष्टता को ठीक करेगा।

+1

जुनीट एपीआई को देखते हुए ऐसा लगता है कि कोई 'assertEquals (स्ट्रिंग, int, int)' नहीं है जो अजीब लगता है ... क्या मुझे कुछ याद आया है? क्या जुनीट लोग वास्तव में 'लांग' का उपयोग करके किए जाने वाले सभी 'int' चेक को मजबूर करने का फैसला करते थे? या मैंने पूरी तरह से एपीआई को http://www.junit.org/apidocs/org/junit/Assert.html पर गलत तरीके से पढ़ा है? –

+0

इनट्स को लंबे समय तक प्रतिस्थापित किया जा सकता है, बस दूसरे तरीके से नहीं। –

+0

हाँ, मुझे पता है, यह सिर्फ एक अजीब डिजाइन निर्णय की तरह लगता है। इंटीजर अंकगणित अक्सर लंबे अंकगणित से तेज होता है, हालांकि मुझे लगता है कि 32-बिट सिस्टम कम आम हो जाने के कारण यह कम प्रासंगिक हो जाएगा। मुझे लगता है कि इकाई परीक्षण दक्षता के लिए एक मुद्दा बहुत ज्यादा नहीं है। –

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