2012-11-28 97 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的一個過時版本的到來。

你可以閱讀關於'新'Junit here的來源。這個想法幾乎相同,也使用.equals()方法。

+0

我的問題是,JUnit的是說,等於對象是不相等的。原來,我沒有正確覆蓋Object.equals。 :)它有助於將'@ Override'註釋添加到您的方法中,以確保您確實可以正確覆蓋。 –

6

做的assertEquals與覆蓋等於類的工作一類?

是的,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源的新URL https://github.com/junit-team/junit/blob/master/src/main/java/org/junit/Assert.java – Neoheurist

1

是 - TestNG的覆蓋equals方法 -

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); 
    } 
相關問題