Bagian 11. Sumber dari Segala Kesalahan

$5 + Rp 10=Rp 9.010 jika $1=Rp 9000

Rp 10 * 2 = Rp 20

Efek perkalian terhadap object?

Amount harus private?

Pembulatan uang?

Equals()

GetHashCode()

Jenis object?

Null?

$10*2=$20

Duplikasi dolar dan rupiah

Equality yang lebih umum

Method Times() yang lebih umum

Bedakan dollar dan rupiah

Currency?

Hapus test DollarMultiplication

Perhatikan dua class Rupiah dan Dollar berikut ini

public class Rupiah:Money{
	public Rupiah(int amount, string currency):base(amount,currency){
	}	 

}
public class Dollar:Money{
	public Dollar(int amount, string currency):base(amount,currency){
	}
}

Keduanya sama bedanya hanya pada konstruktor, yang itupun juga hampir mirip: hanya karena nama class. Tidak ada alsan yang cukup kuat untuk membiarkan kedua class ini ada hanya karena beda konstruktor. Karena itu pada bagian ini kita akan coba hapus kedua class yang telah kita buat capek-capek. Cepek deh…

Kita ubah semua factory, yang mereference keduanya, menginstance langsung class Money daripada Dollar apalagi Rupiah.

public  class Money{
	...
	public static Money US(int amount){
		return new Money(amount,"US");
	}
	public Money Times(int multiplier){
		return new Money(this.m_amount *multiplier, m_currency);;
	}
	...
}

Test tetap green.

Untuk Dollar bisa kita hapus. Tetapi untuk Rupiah tidak bisa, karena ia tereference di test yang baru saja kita buat, DifferenceClassEquality.

[Test]
public void DifferentClassEquality(){
	Assert.AreEqual(new Money(10,"Rp"),new Rupiah(10,"Rp"));
}

Apakah test ini berpengaruh pada yang lain jika kita hapus? Coba kita lihat pada test Equality yang lain.

[Test]
public void Equality(){
	Assert.IsTrue(Money.Rp(10).Equals(Money.Rp(10)),"10 rupiah TIDAK sama dengan 10 rupiah");
	Assert.IsFalse(Money.Rp(10).Equals(Money.Rp(5)),"10 rupiah sama dengan 5 rupiah");
	Assert.IsTrue(Money.US(10).Equals(Money.US(10)),"10 dolar TIDAK sama dengan 10 dolar");
	Assert.IsFalse(Money.US(10).Equals(Money.US(5)),"10 dolar sama dengan 5 dolar");
	Assert.IsFalse(Money.US(10).Equals(Money.Rp(10)),"10 dollar sama dengan 10 rupiah");
}

Test ini saya kira cukup menggambarkan apa yang kita inginkan tentang kesamaan atau ketidaksamaan dua object uang. Namun, assersi ke 3 dan 4 untuk dollar kita hapus saja, sebab itu sama dengan yang no 1 dan 2.

[Test]
public void Equality(){
	Assert.IsTrue(Money.Rp(10).Equals(Money.Rp(10)),"10 rupiah TIDAK sama dengan 10 rupiah");
	Assert.IsFalse(Money.Rp(10).Equals(Money.Rp(5)),"10 rupiah sama dengan 5 rupiah");
	Assert.IsFalse(Money.US(10).Equals(Money.Rp(10)),"10 dollar sama dengan 10 rupiah");
}

Karena kita tidak lagi membutuhkan class Rupiah maka test yang membandingkan Rupiah dengan Money di test DifferenceClassEquality bisa kita hapus. Dengan demikian class Rupiah juga boleh kita hapus.

Perhatikan lagi kedua test berikut ini,

[Test]
public void Multiplication(){
	Money sepuluhRupiah=Money.Rp(10);
	Assert.AreEqual(Money.Rp(20),sepuluhRupiah.Times(2));
	Assert.AreEqual(Money.Rp(30),sepuluhRupiah.Times(3));
	Assert.AreEqual(Money.Rp(50),sepuluhRupiah.Times(5));
}
[Test]
public void DollarMultiplication(){
	Money sepuluhDollar=Money.US(10);
	Assert.AreEqual(Money.US(20),sepuluhDollar.Times(2));
	Assert.AreEqual(Money.US(30),sepuluhDollar.Times(3));
	Assert.AreEqual(Money.US(50),sepuluhDollar.Times(5)); 

}

Kecuali konstruktor kedua test ini tidak ada perbedaan secara logic. Jadi lebih baik salah satu kita hapus.

$5 + Rp 10=Rp 9.010 jika $1=Rp 9000

Rp 10 * 2 = Rp 20

Efek perkalian terhadap object?

Amount harus private?

Pembulatan uang?

Equals()

GetHashCode()

Jenis object?

Null?

$10*2=$20

Duplikasi dolar dan rupiah

Equality yang lebih umum

Method Times() yang lebih umum

Bedakan dollar dan rupiah

Currency?

Hapus test DollarMultiplication

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: