2012-11-28 6 views

उत्तर

34

source code of the assertEquals method कि आप Junit GitHub Repo पर पा सकते हैं से:

/** 
* Asserts that two objects are equal. If they are not 
* an AssertionFailedError is thrown with the given message. 
*/ 
static public void assertEquals(String message, Object expected, Object actual) { 
    if (expected == null && actual == null) { 
     return; 
    } 
    if (expected != null && expected.equals(actual)) { 
     return; 
    } 
    failNotEquals(message, expected, actual); 
} 

आप देख सकते हैं कि JUnit .equals() विधि का उपयोग किया जाता है।

संपादित करें:

कोड स्निपेट JUnit के एक पदावनत संस्करण से आ रही है।

आप 'नया' जूनिट here के स्रोत के बारे में पढ़ सकते हैं। विचार काफी समान है, .equals() विधि का भी उपयोग किया जाता है।

+0

मेरे मुद्दा यह है कि JUnit कह रहे थे कि बराबर वस्तुओं बराबर नहीं थे। यह पता चला है कि मैंने 'Object.equals' को ठीक से ओवरराइड नहीं किया है। :) यह सुनिश्चित करने के लिए कि आपने वास्तव में सही तरीके से ओवरराइड किया है, यह सुनिश्चित करने के लिए '@ ओवरराइड' एनोटेशन को अपनी विधि में जोड़ने में मदद करता है। –

6

assertEquals करता है एक वर्ग है कि बराबरी ओवरराइड करता है के साथ काम करता के साथ काम करता assertEquals (वस्तु O1, वस्तु O2) का उपयोग करता है?

हाँ, assertEquals() कक्षा में एक है तो equals() ओवरराइड किया गया है।

2

हां यह करता है।

Object m = new Object() { 

    @Override 
    public boolean equals(Object obj) { 
     System.out.println("proof!"); 
     return super.equals(obj); 
    } 
}; 
Assert.assertEquals(m, m); 
4

हाँ, यह equals कॉल और वहाँ एक अलग विधि, assertSame, == उपयोग करता है। बस चीजों को साफ़ करने के लिए, assertEquals ऑब्जेक्ट के साथ काम करता है क्योंकि सभी ऑब्जेक्ट equals घोषित करते हैं।

1

JUnit ओपनसोर्स है, इसलिए आप इसे स्रोत में अपने आप को देखा जा सकता था: https://github.com/junit-team/junit4/blob/master/src/main/java/org/junit/Assert.java

static public void assertEquals(String message, Object expected, 
     Object actual) { 
    if (equalsRegardingNull(expected, actual)) { 
     return; 
    } else if (expected instanceof String && actual instanceof String) { 
     String cleanMessage = message == null ? "" : message; 
     throw new ComparisonFailure(cleanMessage, (String) expected, 
       (String) actual); 
    } else { 
     failNotEquals(message, expected, actual); 
    } 
} 

private static boolean equalsRegardingNull(Object expected, Object actual) { 
    if (expected == null) { 
     return actual == null; 
    } 

    return isEquals(expected, actual); 
} 

private static boolean isEquals(Object expected, Object actual) { 
    return expected.equals(actual); 
} 

तो जैसा कि आप यह equals का उपयोग करता है देख सकते हैं। यदि आप पहचान की तुलना करना चाहते हैं, तो आप assertSame का उपयोग करें।

+0

Assert.java स्रोत https://github.com/junit-team/junit/blob/master/src/main/java/org/junit/Assert.java पर नया यूआरएल – Neoheurist

1

हाँ - TestNG ओवरराइड करता है के बराबर होती है -

static public void assertEquals(Object actual, Object expected, String message) { 
    if((expected == null) && (actual == null)) { 
     return; 
    } 
    if(expected != null) { 
     if (expected.getClass().isArray()) { 
     assertArrayEquals(actual, expected, message); 
     return; 
     } else if (expected.equals(actual)) { 
     return; 
     } 
    } 
    failNotEquals(actual, expected, message); 
    } 
संबंधित मुद्दे