Membandingkan Kesamaan Referensi Dua Buah Object

Identity

Berbeda dari test Equality, test Identity lebih pada apakah kedua object itu sama referensinya atau tidak. Kaitannya erat sekali pada instance dari object. Test terhadap Identity NUnit mempunyai daftar method assersi beserta overloadingnya berikut ini:

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

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

Agar lebih jelas anda bisa lihat test berikut ini:

[Test] 
public void TestObjectReference() 
{ 
	Employee emp=new Employee("Agus"); 
	Employee agus=emp; 
	Employee dodo=new Employee("Dodo"); 
	Assert.AreSame(emp,agus); 
	Assert.AreNotSame(emp,dodo); 
}

Perhatikan bagian agus=emp. Disini agus mereference object yang sama dengan emp, sehingga keduanya dikatakan sama, satu object. Sedangkan untuk object dodo, keduanya berbeda object, sehingga dikatakan tidak sama.

Salah satu applikasi yang harus melakukan test kesamaan object adalah pengkopian object. Misalnya, daripada membuat object baru lebih baik mengkopinya. Contoh: agus=emp.Copy(). Perhatikan test perikut ini:

[Test] 
public void TestCopyObject() 
{ 
	Employee emp=new Employee("Agus"); 
	Employee agus=emp.Copy(); 
	Assert.AreNotSame(emp,agus); 
}

Kompiler bilang kalau method Copy() tidak ada, jadi kita harus membuatnya. Ada dua cara untuk menyesaikan ini, menggunakan MemberwispeClone() atau menginstance object baru. Saya akan coba pakai MemberwiseClone(), walaupun ini cuma mengkopi kulitnya, saya pikir cukup.[note: mengkopi kulit berarti hanya variabel dengan tipe data value yang dikopi, sedangkan reference hanya dikopi alamat reference-nya. Jika ingin mengkopi lebih jauh, cari referensi dengan keyword: deep copy]

public class Employee 
{ 
	...
	public Employee Copy(){ 
		return (Employee)this.MemberwiseClone(); 
	} 

}

Pertanyaanya, apakah yang dikopy benar-benar agus. Ok, kita tambahkan sedikit test,

[Test] 
public void TestCopyObject() 
{ 
	Employee emp=new Employee("Agus"); 
	Employee agus=emp.Copy(); 
	Assert.AreNotSame(emp,agus); 
	Assert.AreEqual("Agus",agus.Name); 
}

Dan saya harus mengimplementasikan property Name,

public class Employee 
{ 
	...
	public string Name{ 
		get{ 
			return “”; 
		} 

}

Pertama-tama saya return “” (string kosong). Kompile sukses. NUnit Red (error). Sekarang kita akan membuatnya benar.

public class Employee 
{ 
	...
	public string Name{ 
		get{ 
			return this.m_nama; 
		} 

}

Sekarang NUnit menjadi green. Kenapa saya capek-capek mereturn string kosong, kenapa tidak langsung return nama. Pertama saya ingin menguji asumsi saya, kedua saya ingin mengikuti pola TDD—sedikit perkenalan buat anda.

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: