JUnit AssertEquals gagal

Saya punya kode untuk yang berikut ini

import static org.junit.Assert.assertEquals;

System.out.println("obj1 name = " + obj1.getName());
System.out.println("obj1 value = " + (obj1.getvalue() == null ? "null" : "not null"));
System.out.println("obj2 name = " + obj2.getName());
System.out.println("obj2 value = " + (obj2.getvalue() == null ? "null" : "not null"));

assertEquals(obj2, obj1);

hasil

obj1 name = DC2
obj1 value = null
obj2 name = DC2
obj2 value = null

java.lang.AssertionError: 
Expected :com.gms.contract.myClass.inventory.MyClass@795ce9b5
Actual   :com.gms.contract.myClass.inventory.MyClass@280cb0b4

Bukankah AsserEquals seharusnya membandingkan berdasarkan nilai?? Bagi saya tampaknya itu membandingkan alamat objek. Tapi mungkinkah saya salah?...

Terima kasih!


person dushkin    schedule 02.10.2018    source sumber
comment
Anda perlu mengganti equals di MyClass.   -  person Roman Konoval    schedule 02.10.2018


Jawaban (1)


Bukankah AsserEquals seharusnya membandingkan berdasarkan nilai??

Tidak, ini seharusnya membandingkan menggunakan metode equals.

Anda perlu mengganti equals di MyClass (dan mengganti hashCode secara bersamaan).

Bagi saya tampaknya itu membandingkan alamat objek.

Tidak, itu hanya hasil dari pemanggilan toString() pada MyClass, tanpa Anda menimpanya. Jika Anda ingin sesuatu yang lebih bermakna ditampilkan, ganti juga toString().

person Andy Turner    schedule 02.10.2018