The Object Itself
CloneFixture
[Test]
public void CloningObject(){
Employee emp1=new Employee();
Employee emp2;
emp2=emp1.MemberwiseClone();
Assert.AreNotEqual(emp1,emp2,"Dua object seharusnya berbeda");
}
Employee
namespace Dewipadi.Clone {
public class Employee {
}
}
MemberwiseClone ternyata protected jadi tidak bisa diakses dari class CloneFixture. Bagaimana kalau kita perkenalkan method baru untuk class Employee, katakanlah Copy(). Didalam method ini kemudian kita panggil MemberwiseClone().
CloneFixture
[Test]
public void CloningObject(){
Employee emp1=new Employee();
Employee emp2;
emp2=emp1.Copy();
Assert.AreNotEqual(emp1,emp2,"Dua object seharusnya berbeda");
}
Employee
public class Employee {
public Employee Copy(){
return (Employee)this.MemberwiseClone();
}
}
Output dari MemberwiseClone ternyata object, jadi kita harus meng-casting secara explisit. Setelah diubah seperti diatas, test PASS/GREEN.
Value Object
Nah sekarang kalau kita tambahkan property didalamnya, kantakanlah Nama, apakah perubahan property ini hanya akan mempengaruhi satu object saja atau kedua object akan berubah? Untuk itu kita buat test baru.
CloneFixture
[Test]
public void CloningFieldOfValueObject(){
Employee emp1=new Employee();
Employee emp2;
emp2=emp1.Copy();
emp1.Name="Dewi Padi";
Assert.AreNotEqual("Dewi Padi",emp2.Name,"Tidak boleh terisi dewi padi");
}
Karena menambahkan property adalah cara yang gampang, kita tidak perlu mem-fake implementasi property. Jadi langsung kita tulis saja get dan set.
Employee
Seperti yang kita harapkan test langsung green.
public class Employee {
private string m_name="";
public Employee Copy(){
return (Employee)this.MemberwiseClone();
}
public string Name {
get {
return this.m_name;
}
set {
this.m_name=value;
}
}
}
Reference Object
Bagaimana dengan object yang terreference dengan object yang sedang kita copy? Apakah ikut tercopy? Atau hanya referencenya saja? Ok. Kita tanyakan saja pada komputer.Scenario testnya kurang lebih seperti ini:
Kita gunakan lagi class Employee. Setiap Employee mempunyai atasan. Nah, atasan itu sebetulnya juga Employee. Kita akan buat dua orang Employee yang satu sebagai atasan dan yang satu lagi sebagai karyawan. Kemudian kita buat satu variabel Employee lagi dan kita copykan employee bawahan tadi ke sini.
CloneFixture
Untuk implementasi di class Employee kita cukup pasang property get set.
[Test]
public void CloningFieldOfReferenceObject(){
Employee atasan=new Employee();
Employee bawahan=new Employee();
bawahan.Atasan=atasan;
Employee copian=bawahan.Copy();
Assert.AreNotEqual(copian.Atasan,atasan);
}
Employee
Hasil dari test ini adalah Red. Dengan kata lain object copian.Atasan sama dengan object atasan. Hal ini terbukti ketika assert not Equal kita ganti dengan assert equal.
public class Employee {
private Employee m_atasan=null;
public Employee Atasan {
get {
return this.m_atasan;
}
set {
this.m_atasan=value;
}
}
}
[Test]
public void CloningFieldOfReferenceObject(){
Employee atasan=new Employee();
Employee bawahan=new Employee();
bawahan.Atasan=atasan;
Employee copian=bawahan.Copy();
Assert.AreNotEqual(copian.Atasan,atasan);
}
And here is the rest of it.

0 komentar:
Poskan Komentar