Coding4ever’s Blog

Just coding… coding… and coding… because coding should be fun :)

Unit Testing Menggunakan NUnit

| Comments

Testing merupakan salah satu fase penting yang harus dilakukan ketika membuat sebuah aplikasi. Testing biasanya dilakukan secara berbarengan pada saat menulis kode. Ada banyak gaya dalam melakukan testing dan yang paling favorit biasanya adalah gaya konvensional. Dengan menggunakan gaya ini programmer desktop akan menggunakan console/winform untuk melihat hasil tes dari sebuah unit (fungsi/method) sedangankan programmer web langsung menggunakan halaman web.

Ini adalah gaya lama yang kita pelajari dari jaman Majapahit #eh, maksudnya masa-masa kuliah dulu :-D, kan enggak keren banget udah jadi programmer pro (programmer yang udah kerja) tapi testingnya masih bergaya mahasiswa :-D

Dengan testing gaya jadul ini, kita yang harus melakukan evaluasi terhadap hasil tesnya. Contoh tes di atas 5 + 2 kok hasilnya 10. Bayangkan klo kita kurang teliti bakalan jadi bug di kemudian hari.

Jika Anda bosan dengan gaya ini (konvensional/jadul/mahasiswa) dan ingin naik level, kita bisa menggunakan tool yang memang dibuat khusus untuk melakukan unit testing seperti NUnit.

Dengan menggunakan tool unit testing, komputer-lah yang melakukan evaluasi terhadap hasil tesnya. Kita tinggal duduk manis he he :-)

Jenis-jenis Testing

Sebenarnya ada banyak jenis-jenis testing, tetapi karena keterbatasan waktu dan ilmu, saya hanya membahas jenis-jenis testing berikut :

Jadi kita akan membahas Unit Testing terlebih dulu.

Unit testing

Unit testing adalah testing di level paling detail dari aplikasi. Artinya, testing di level method/function. Tes ini biasanya dilakukan oleh programmer dan bukan oleh tester, karena membutuhkan pengetahuan yang rinci tentang desain aplikasi dan kode yang ditulis. Ada beberapa tool yg bisa digunakan untuk keperluan ini tergantung dari bahasa pemrograman yang kita gunakan. Misal di .NET (NUnit), Java (JUnit) dan PHP (PHPUnit).

Di postingan ini kita akan menggunakan NUnit sebagai tool untuk melakukan unit testing. NUnit adalah framework unit testing yang digunakan untuk bahasa pemrograman .NET. NUnit sendiri merupakan hasil portingan dari JUnit. Sebelum menggunakan NUnit tentunya harus kita download dan kemudian menginstallnya.

Membuat Project

Untuk uji coba unit testing ada dua project yang akan kita buat yaitu :

  1. Project CalculatorLib – Ini adalah project target yang akan kita tes untuk setiap unitnya (fungsi/method).

  2. Project CalculatorUnitTest – Ini adalah project unit testing yang digunakan untuk mengetes project CalculatorLib.

Membuat Project CalculatorLib

Project CalculatorLib adalah project yang akan kita buatkan unit testingnya, project ini bertipe Class Library.

Nah di project ini, kita akan membuat class baru dengan nama Calculator kemudian menambahkan empat method yaitu Tambah, Kurang, Kali dan Bagi.

Coba perhatikan gambar di atas, method Tambah sengaja dibuat salah dengan menggunakan operator kali (*), biar nanti keliatan efeknya ketika dites menggunakan NUnit.

Setelah project CalculatorLib selesai kita lanjut dengan membuat project CalculatorUnitTest.

Membuat Project CalculatorUnitTest

Project CalculatorUnitTest adalah project unit testing yang digunakan untuk mengetes project CalculatorLib, project ini juga bertipe Class Library.

Di project ini, kita akan menambahkan class baru dengan nama CalculatorTest yang mempunyai empat method yaitu TambahTest, KurangTest, KaliTest dan BagiTest. Jadi konvensi penamaannya adalah untuk nama class di tambah akhiran Test. Contoh class Calculator menjadi CalculatorTest. Untuk method juga sama, misal method Tambah menjadi TambahTest, method Kurang menjadi KurangTest begitu seterusnya.

Method-method yang ada di class unit testingnya, biasanya bersifat independent artinya masing-masing method ini bisa dijalankan/eksekusi secara mandiri (tidak tergantung dengan method yang lain) sehingga kita bisa menjalankan unit testing secara berulang.

Menambahkan Referensi Project CalculatorLib

Agar project CalculatorUnitTest bisa mengakses semua class dan method yang ada di project CalculatorLib, kita terlebih dulu harus menambahkan referensi CalculatorLib. Caranya seperti berikut :

  1. Klik kanan node References -> Add Reference…

  2. Aktifkan panel Solution kemudian pilih project CalculatorLib

  3. Klik tombol Ok, kemudian cek lagi node References, seharusnya sudah ada tambahan library CalculatorLib

Kemudian lengkapi kode class CalculatorTest, seperti gambar di bawah ini.

Menambahkan Library Unit Testing

Seperti penjelasan saya di awal postingan, untuk contoh unit testing ini kita akan menggunakan NUnit. Berikut langkah-langkah menambahkan library NUnit

  1. Klik kanan node References -> Add Reference…

  2. Setelah tampil dialog Reference Manager, aktifkan panel Assemblies -> Extensions kemudian aktifkan pilihan nunit.framework

  3. Klik tombol Ok, kemudian cek lagi node References, seharusnya sudah ada tambahan library nunit.framework

Menulis Unit Testing

Setelah menambahkan library unit testing, project CalculatorUnitTest tidak otomatis langsung dikenali oleh tool unit testing, ada hal-hal lainnya yang perlu kita ketahui dalam menulis unit testing menggunakan Nunit yaitu :

Attributes

Digunakan untuk memberi tag/penanda class dan method yang akan dites. Ada dua attribut yang sering digunakan yaitu attribut [TestFixture] untuk menandai class dan attribut [Test] untuk menandai method. Contoh :

Selain itu ada attribut lain yang digunakan untuk menandai method yang berfungsi sebagai method inisialisasi yaitu attribut [SetUp]. Contoh :

Jadi method Init di atas akan dijalankan terlebih dulu sebelum tool Nunit menjalankan method-method lain yang ditandai dengan attribut [Test].

Assertions

Merupakan sekumpulan method static yang digunakan untuk mengevaluasi method yang akan dites. Jadi method-method assertions akan mengembalikan nilai boolean (true/false). Contoh :

Pada gambar di atas kita menggunakan salah satu method Assertions yaitu method AreEqual untuk membandingkan dua buah nilai, yaitu nilai yang di harapkan (expected) dan nilai aktual. Nilai expected kita inputkan secara manual sedangkan nilai aktual dihasilkan dari pemanggilan method. Coba perhatikan potongan kode berikut :

Dari hasil pemanggilan method Tambah(5, 2), jika menghasilkan nilai 7 maka method AreEqual akan mengembalikan nilai true yang artinya tes berhasil karena sesuai dengan nilai yang diharapkan yaitu 7 selain itu akan mengembalikan nilai false/gagal.

Untuk referensi method-method Assertions lainnya bisa dicek disini.

NUnit GUI Runner

Merupakan tool GUI bawaan NUnit yang digunakan untuk menjalankan project unit testing. Tool ini membutuhkan file assembly (dll) dari project unit testing. Jadi project CalculatorUnitTest harus kita build terlebih dulu untuk menghasilkan file assembly(CalculatorUnitTest.dll), kemudian kita buka menggunakan tool NUnit GUI Runner.

Caranya dari menu File -> Open Project kemudian cari hasil build project CalculatorUnitTest (CalculatorUnitTest.dll).

Untuk memulai tes, klik tombol Run

Dari gambar di atas hanya method Tambah yang gagal melewati unit testing, coba kita cek kode unit testnya.

Dari kode di atas 5 + 2 seharusnya menghasilkan nilai 7 (nilai expected/diharapkan), tetapi dari hasil unit testingnya malah menghasilkan nilai 10, dari mana datangnya nilai 10 ini ?

Dari sini kita sudah bisa menebak ada yang salah dengan method Tambahnya, coba kita cek lagi method Tambah dari class Calculator.

Ops!!! ternyata benar ada kesalahan logic yaitu salah operator di method Tambah yang seharusnya menggunakan operator tambah (+) malah menggunakan operator kali (*), sehingga wajar 5 * 2 menghasilkan nilai 10 bukannya 7. Jadi harus kita benarin dulu operatornya kemudian build ulang.

Setelah itu kita cek lagi hasil unit testingnya

Selamat MENCOBA :-)

Referensi :

software testing

Tentang Penulis

Software developer yang fokus mengembangkan aplikasi di atas platform .NET (Desktop, ASP.NET MVC, Web Service, Microservice) dan Android. Senang mempelajari teknologi baru terutama di bidang OOP, Design Pattern, ORM, Database, Continuous Integration & Deployment dan arsitektur Microservice.
Selain mengajar, saat ini penulis juga bekerja sebagai staf IT di salah satu PTS di Yogyakarta sebagai senior software developer. Di waktu luang insya Alloh akan terus berbagi pengalaman di blog ini :)

« Repository Pattern Bagian #2 Coverage Testing Menggunakan NUnit, OpenCover dan ReportGenerator »

Comments