Membandingkan Kesamaan Dua Object

Equality

Asersi ini yang sering kita pakai. Ada dua macam test, Assert.AreEqual dan Assert.AreNotEqual. Test ini digunakan untuk membandingkan dua objek. NUnit memanggil method Equals() dari object yang dibandingkan. Berikut ini adalah daftar overload dari kedua method test ini:

Assert.AreEqual( int expected, int actual );
Assert.AreEqual( int expected, int actual, string message );
Assert.AreEqual( int expected, int actual, string message, 
                 params object[] parms );
                                 
Assert.AreEqual( uint expected, uint actual );
Assert.AreEqual( uint expected, uint actual, string message );
Assert.AreEqual( uint expected, uint actual, string message, 
                 params object[] parms );

Assert.AreEqual( decimal expected, decimal actual );
Assert.AreEqual( decimal expected, decimal actual, string message );
Assert.AreEqual( decimal expected, decimal actual, string message, 
                 params object[] parms );

Assert.AreEqual( float expected, float actual, float tolerance );
Assert.AreEqual( float expected, float actual, float tolerance,
                 string message );
Assert.AreEqual( float expected, float actual, float tolerance,
                 string message, params object[] parms );

Assert.AreEqual( double expected, double actual, double tolerance );
Assert.AreEqual( double expected, double actual, double tolerance,
                 string message );
Assert.AreEqual( double expected, double actual, double tolerance,
                 string message, params object[] parms );

Assert.AreEqual( object expected, object actual );
Assert.AreEqual( object expected, object actual, string message );
Assert.AreEqual( object expected, object actual, string message, 
                 params object[] parms );

Assert.AreNotEqual( int expected, int actual );
Assert.AreNotEqual( int expected, int actual, string message );
Assert.AreNotEqual( int expected, int actual, string message,
                 params object[] parms );

Assert.AreNotEqual( long expected, long actual );
Assert.AreNotEqual( long expected, long actual, string message );
Assert.AreNotEqual( long expected, long actual, string message,
                 params object[] parms );

Assert.AreNotEqual( uint expected, uint actual );
Assert.AreNotEqual( uint expected, uint actual, string message );
Assert.AreNotEqual( uint expected, uint actual, string message,
                 params object[] parms );

Assert.AreNotEqual( ulong expected, ulong actual );
Assert.AreNotEqual( ulong expected, ulong actual, string message );
Assert.AreNotEqual( ulong expected, ulong actual, string message,
                 params object[] parms );

Assert.AreNotEqual( decimal expected, decimal actual );
Assert.AreNotEqual( decimal expected, decimal actual, string message );
Assert.AreNotEqual( decimal expected, decimal actual, string message,
                 params object[] parms );

Assert.AreNotEqual( float expected, float actual );
Assert.AreNotEqual( float expected, float actual, string message );
Assert.AreNotEqual( float expected, float actual, string message,
                 params object[] parms );

Assert.AreNotEqual( double expected, double actual );
Assert.AreNotEqual( double expected, double actual, string message );
Assert.AreNotEqual( double expected, double actual, string message,
                 params object[] parms );

Assert.AreNotEqual( object expected, object actual );
Assert.AreNotEqual( object expected, object actual, string message );
Assert.AreNotEqual( object expected, object actual, string message,
                 params object[] parms );

Apa itu Equality? Coba perhatikan contoh berikut ini:

[Test] 
public void TestTwoEmployee() 
{ 
	Employee employee1=new Employee("Agus"); 
	Employee employee2=new Employee("Agus"); 
	Assert.AreEqual(employee1,employee2,"Agus ya agus, bukan yang lain"); 
}

Agar bisa dikompile saya harus buat class Employee.

public class Employee 
{ 
	private string m_nama; 
	public Employee(string nama) 
	{ 
		m_nama=nama; 
	} 
}

Setelah dikompile test kemudian saya jalankan. Gambar berikut ini adalah screen shoot dari MonoDevelop.

Red NUnit di MonoDevelop

Gambar. Red NUnit di mono

NUnit memberikan sinyal RED(merah). Dengan demikian Agus tidak sama dengan Agus. Mengapa demikian? Ini disebabkan karena object agus sesungguhnya ada dua macam, perhatikan kita membuat dua object. Lantas bagaimana agar kedua object ini sama? Caranya adalah dengan mengoverride Equality dari class Employee.

public class Employee 
{ 
	private string m_nama; 
	public Employee(string nama) 
	{ 
		m_nama=nama; 
	} 
	public override bool Equals (object o) 
	{ 
		if(!(o is Employee)) 
			return false; 
		Employee emp=(Employee)o; 
		return this.m_nama.Equals(emp.m_nama); 
	 
	} 
	public override int GetHashCode () 
	{ 
		return this.m_nama.GetHashCode(); 
	} 

}

Ada dua method yang saya override: Equals() dan GetHashCode(). Untuk Equals, pertama-tama saya cek terlebih dahulu apakah kedua object mempunyai tipe yang sama. Kemudian saya casting, setelah itu baru dibandingkan. Sedangkan untuk GetHashCode() saya cukup mengambilnya dari variabel m_nama.

Gambar. Green NUnit, yang menunjukkan bahwa test kita sukses.

Tujuan saya disini adalah menunjukkan pada anda, apa itu equality. Perhatikan bahwa sejatinya disana ada dua objek dan dua objek itu dikenali oleh NUnit sebagai “barang” yang sama. Lantas bagaimana jika kita ingin mengetahui apakah dua object mereferensikan object yang sama? Kita lihat nanti dibagian test Identity.

Salah satu kegunaan Equality dalam sebuah sistem basis data, salah satunya adalah untuk menentukan bisnis object. Yang saya maksud dengan bisnis object adalah identitas yang bisa membedakan sebuah object dalam sistem bisnis dengan objek-objek lainnya dalam sistem itu. Misalnya kode barang, kode invoice, kode order dan lain-lain. Kode barang biasanya bertipe string. Sementara itu kode didalam sistem biasanya lebih sering dipakai dalam bentuk id yang pertipe long. Jadi untuk berkomunikasi dengan orang digunakanlah kode yang bertipe string sedangkan antar objec dalam sistem digunakanlah id yang bertipe long.

Iklan

There are no comments on this post.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: