Pengujian dalam NUnit

Assersi

Lantas apa yang akan kita test? Seperti yang telah saya sebutkan sebelumnya, saya akan mengikuti metode Test Driven Development (TDD). Dengan demikian semua harus bermula dari test. Kembali lagi, apa yang akan kita test?

Dengan TDD, berarti kita berada di sisi pengguna dari sebuah assembly atau program. Kita sebagai pengguna diberikan Application Program Interface (API). Nah, test yang kita lakukan adalah test terhadap API tersebut.

Bukankah API itu belum ada? Benar. Bahkan assembly/programnya pun masih dalam angan-angan. Karena itu sebenarnya, apa yang nantinya kita tulis dalam program hanyalah mengikuti apa yang diinginkan oleh test. Dengan kata lain, program dibuat dengan proses belajar: kau perlu apa, mungkin seperti ini. Kira-kira seperti itu.

Nah, API itu apa sesungguhnya? API pada dasarnya adalah fitur dari program. Dengan bahasa lain, programnya bisa apa. Programnya boleh diapain. Untuk menguji program bisa apa saja dalam NUnit disebut assersi. Sampai versi 2, NUnit mempunyai dua fitur assersi: klasik dan konstraint. Saya akan memakai yang klasik. Sebab, selain banyak orang lebih familier dengan yang ini juga NUnit di Mono baru menyediakan yang klasik—khususnya untuk pengguna linux.

Klasik

Agar mudah membayangkannya, saya akan ambil sebuah contoh. Katakanlah kita ingin membuat kalkulator. Mesin dari kalkulator itu kita beli dari luar. Kita hanya membuat sisi interfacenya saja. Kita hanya tahu API dari kalkulator tersebut. Misalnya, untuk operasi penjumlahan tersedia API kalkulator.Tambah(angka1, angka2). Nah, dari sisi kita, pengguna akan melakukan test terhadap API ini, katakanlah kita ingin menguji apakah 2+2=4. Dalam NUnit kita tulis sebagai,

using NUnit.Framework; 
namespace Fatur.TDD.NUnitTest 
{ 
	[TestFixture] 
	public class CalculatorFixture 
	{ 
		[Test] 
		public void TestPenjumlahan(){ 
			ICalculator calculator=new Calculator(); 
			Assert.AreEqual(4,calculator.Tambah(2,2),"Penjumlahan 2+2=4"); 
		} 
		 
	} 
} 

Pertama-tama saya inisialisasi kalkulator. Perhatikan, saya tidak mendefinisikannya sebagai kongkrit class tetapi sebagai interface kalkulator. Mengapa? Kembali pada ide tentang API, yang kita tahu hanyalah API, jadi tidaklah bijak jika yang kita pakai adalah kongkrit class. ICalculator belum ada, apalagi class Calculator. Tetapi kita sudah membayangkan bahwa didalam interface ICalculator terdapat method Tambah(angka1, angka2). Saya tidak akan membuat implementasi Calculator disini, kita akan coba nanti dibagian quick start/studi kasus.

Kemudian Assert.AreEqual() apa pula ini? Nah, inilah method static dari framework NUnit yang akan sering kita gunakan untuk memerintahkan NUnit melakukan pengujian. AreEqual() berarti memerintahkan NUnit untuk membandingkan 2 (dua) object dengan memanggil method Equals() dari masing-masing object. Nah, ini tergantung dari equality dari object, apakah mengikuti framework .net—yang berarti apakah referensi di memori kedua object sama atau tidak, atau telah dioverride dengan definisi yang baru—kita akan bahas ini dibagian studi kasus.

Kuncinya adalah keluaran apa yang kita inginkan, atau expected. Kita menginginkan 4 dari hasil penjumlahan 2 ditambah 2. Kita tidak peduli bagaimana kalkulator melakukan perhitungan. Pokoknya dia harus mengeluarkan hasil 4.

Saya biasanya meletakkan apa yang saya inginkan sebagai parameter paling kiri, diikuti apa yang ingin kita uji dan terakhir keterangan untuk memudahkan saya mengidentifikasi ketika terjadi error. Sehingga dalam contoh, assersi kita menjadi Assert.AreEqual(4,calculator.Tambah(2,2),”Penjumlahan 2+2=4″).

Signature assersi/pengujian ada tiga macam:

  • Assert.[nama assersi](expected, actual). Membandingkan dua object.
  • Assert.[nama assersi](expected, actual, message). Membandingkan dua object, kemudian diikuti pesan kesalahan jika diinginkan. Pesan ini akan muncul pada saat terjadi kesalahan perbandingan.
  • Assert.[nama assersi](expected, actual, message, param[] args). Sama dengan no 2 dengan message yang bisa ditambahkan seperti dalam format string. Contoh, Assert.AreEqual(1,2,”satu {0} tidak sama dengan dua {1}”, param1, param2). Jika param1=”angka 1” dan param2=”angka 2”, maka pesan kesalahan yang muncul menjadi: “satu angka 1 tidak sama dengan dua angka 2”.

Selain ketiga variasi diatas, untuk tipe-tipe data numerik yang berupa pecahan, juga disediakan seilsih yang masih bisa ditoleransi sedemikian hingga kedua object numerik itu bisa dianggap sama. Kita akan bahas nanti lebih detail.

NUnit mensupport banyak sekali assersi. Ok, kita akan bahas satu per satu.

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: