1. 程式人生 > >JUnit中assertEquals和assertSame方法的不同

JUnit中assertEquals和assertSame方法的不同

1)提供的介面數量不完全相同。
assertEquals支援boolean,long,int等等java primitiveType變數。
assertSame只支援Object。

2)比較的邏輯不同,結果可能不同。
assertSame是物件直接比較。assertEquals能利用被比較物件提供的比較邏輯來進行比較。
使得同樣的條件下,兩者的執行結果不一定相同。
簡單解釋如下:
assertEquals(Object A,  Object B) 的比較邏輯:
如果 A,B都是Null,返回true。否則呼叫 A.equals(B)來判斷。

assertSame(Object A, Object B)的比較邏輯:
以A == B運算的結果來判斷。

A.equals(B) 和 A==B 的差別在於。
如果A沒有重寫java.lang.Object的equals方法,
那麼就是兩個java物件的記憶體地址比較,比較結果和 A==B的結果相同。
如果A重寫了equals方法(比如GregorianCalendar,BigDecimal類),
那麼比較的結果不一定和A==B的結果相同。