Bagian 16. The End: Abstraksi

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

Rp 10 + Rp 10=Rp 20

Kembalian Money untuk penjumlahan Rp 10 + Rp 10

Sum.Plus()

IEkspression.Times()

Berikut ini adalah test untuk Sum.Plus(),

[Test]
public void SumPlus(){
	IEkspression limaDollar=Money.US(5);
	IEkspression delapanSatuRibuRupiah=Money.Rp(81000);
	Bank bank=new Bank();
	bank.AddRate("Rp","US",9000);
	IEkspression sum=new Sum(limaDollar,delapanSatuRibuRupiah).Plus(limaDollar);
	Money hasilTukar=bank.Tukar(sum,"US");
	Assert.AreEqual(Money.US(19),hasilTukar);
}

Sebenarnya kita juga bisa melakukan limaDollar.Plus(delapanSaruRibuRupiah).Plus(limaDollar), saya buat seperti itu agar lebih kelihatan dari siapa Plus() berasal.

Pesan yang kita dapat jika test kita jalankan adalah “null reference”. Karena pada bagian sebelumnya operasi Plus() memang kita beri kembalian berupa null. Ok, kita akan bereskan disini.

public class Sum:IEkspression{
	...
	public IEkspression Plus(IEkspression addend){
		return new Sum(this,addend);
	}
}

cukup kita return new Sum() yang Sum sendiri sebagai argument, sehingga pada saat Tukar() dipanggil ia akan menjadi rekursif.

Sum.Plus() telah kita selesaikan. Berikutnya Iekspression.Times()

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

Rp 10 + Rp 10=Rp 20

Kembalian Money untuk penjumlahan Rp 10 + Rp 10

Sum.Plus()

IEkspression.Times()

Jika kita bisa membuat Sum.Times() maka deklasi IEkspression.Times() akan sangat mudah. Untuk itu kita akan buat terlebih dahulu test untuk Sum.Time().

[Test]
		public void SumTimes(){
			IEkspression limaDollar=Money.US(5);
			IEkspression delapanSatuRibuRupiah=Money.Rp(81000);
			Bank bank=new Bank();
			bank.AddRate("Rp","US",9000);
			IEkspression sum=new Sum(limaDollar,delapanSatuRibuRupiah).Times(2);
			Money hasilTukar=bank.Tukar(sum,"US");
			Assert.AreEqual(Money.US(28),hasilTukar); 

		}

kemudian di dalam Sum kita definisikan Times(),

public class Sum:IEkspression{
	...
	public IEkspression Times(int multiplier){
	     return new Sum(this.m_tertambah.Times(multiplier),this.m_penambah.Times(multiplier));
	}
}

Akhirnya, di interface IEkspression juga kita harus deklarasikan agar bisa dikompile.

public interface IEkspression{
	Money Tukar(Bank bank,string ke);
	IEkspression Plus(IEkspression addend);
	IEkspression Times(int multiplier);
}

Test bisa kita kompile. Dan pada saat kita jalankan semua test green. Iekspression.Sum sudah selesai. Tinggal satu test lagi.

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

Rp 10 + Rp 10=Rp 20

Kembalian Money untuk penjumlahan Rp 10 + Rp 10

Sum.Plus()

IEkspression.Times()

Untuk test yang terakhir kita buat test seperti berikut ini,

public void testPlusSameCurrencyReturnsMoney() {
    	IEkspression sum= Money.Rp(1).Plus(Money.Rp(1));
    	Assert.IsTrue(sum is Money);
}

Test pass dan tidak ada yang perlu diubah. Tetapi kita yakin bahwa output dari Money.Plus() adalah Money.

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

Rp 10 + Rp 10=Rp 20

Kembalian Money untuk penjumlahan Rp 10 + Rp 10

Sum.Plus()

IEkspression.Times()

Semua task telah kita selesaikan. Dan ini lah akhir dari contoh TDD. Sekali lagi ini hanya contoh, ada banyak hal perlu diselesaikan agar model ini bisa dipakai di production. Money, misalnya akan lebih baik jika field yang terlibat dengan uang sebagai amount jika dalam bentuk decimal daripada int. Atau bisa jadi anda memiliki model sendiri untuk Money. Tidak ada kebenaran yang absolut diluar kebenaran Tuhan. Anda perlu yakin dengan apa yang anda miliki. Bagian-bagian selanjutnya saya akan lebih banyak berbicara mengenai pola-pola (patterns) TDD dan bagaimana menggunkan TDD dalam siklus yang besar.

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: