2012-11-28 24 views

Trả lời

34

Từ source code of the assertEquals method mà bạn có thể tìm thấy trên 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); 
} 

Bạn có thể thấy rằng Junit đang sử dụng phương pháp .equals().

Edit:

Đoạn mã đến từ một phiên bản lỗi thời của Junit.

Bạn có thể đọc về nguồn của 'mới' Junit here. Ý tưởng này khá giống nhau, phương pháp .equals() cũng được sử dụng.

+0

Vấn đề của tôi là JUnit đã nói rằng đối tượng bằng nhau là không bằng nhau. Hóa ra là tôi đã không ghi đè 'Object.equals' đúng cách. :) Nó giúp thêm chú thích '@ Override' vào phương thức của bạn để đảm bảo rằng bạn đã thực hiện, trên thực tế, ghi đè chính xác. –

6

không assertEquals làm việc với một lớp học đó sẽ ghi đè bình đẳng?

Có, assertEquals() gọi số ghi đè equals() nếu lớp đó có.

2

Có.

Object m = new Object() { 

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

Vâng, nó gọi equals và có một phương pháp riêng biệt, assertSame, có sử dụng ==. Chỉ cần xóa mọi thứ, assertEquals hoạt động với bất kỳ đối tượng nào vì tất cả các đối tượng đều khai báo equals.

1

JUnit là mã nguồn mở, vì vậy bạn có thể nhìn nó lên bản thân trong nguồn: 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); 
} 

Như bạn có thể thấy nó sử dụng equals. Nếu bạn muốn so sánh danh tính, bạn sử dụng assertSame.

+0

URL mới cho nguồn Assert.java https://github.com/junit-team/junit/blob/master/src/main/java/org/junit/Assert.java – Neoheurist

1

có - TestNG ghi đè bằng -

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); 
    } 
Các vấn đề liên quan