Unit
Testing dapat di analogikan aktifitas berolahraga, Kita tahu kalau hal
tersebut adalah baik dan akan terlihat hasilnya setelah dilakukan
secara rutin dan beberapa lama kemudian, tetapi pada kenyataan kita
sering malas melakukan hal tersebut.
Unit Testing untuk memeriksa
bahwa kode program yang ditulis telah memberikan output yang benar
berdasarkan Inputan yang diberikan.
Para developer memahami dalam
membuat sebuah software yang kualitasnya terjaga diperlukan pengujian
yang baik. Menulis Sekenario testing, menjalankan testing dan
menganalisa hasilnya adalah perkerjaaan yang membosankan dalam proses
development software.
Selain itu pengembangan sebuah
software biasanya cenderung berubah terus menerus mengikuti spesifikasi
kebutuhan dan ketika mengerjakan perubahan tersebut akan berpotensi
untuk membuat error atau bug yang baru.
Karena persoalan tersebut maka
sangat disarankan untuk membuat Unit Testing untuk menjamin bahwa
aplikasi telah berjalan sesuai dengan yang diharapakan dengan segala
perubahan yang terjadi.
Untuk menyingkat waktu dalam
menjalankan Unit Testing pada proses development software maka perlu
dilakukan oleh mesin secara otomatis atau yang bisa disebut dengan
Automatic Testing.
Automatic Testing adalah
pengujian yang biasa dilakukan oleh manusia secara manual yang kemudian
diganti oleh mesin, Hal tersebut untuk menyingkat waktu dalam proses
pengujian pada proses development software.
Beberapa Manfaat Automatic Testing adalah sebagai berikut.
- Untuk melakukan pengujian secara otomatis bahwa seluruh bagian aplikasi tidak ada error ketikan dideploy/dipasang pada sebuah mesin/pc/komputer yang baru.
- Untuk melakukan pengujian secara otomatis bahwa seluruh bagian aplikasi tidak ada error ketika terjadi perubahan kode program pada suatu bagian aplikasi yang lain.
Berikut ini adalah contoh dari konsep unit testing
*1*. Terdapat sebuah kelas yang memiliki tanggung jawab sebagai kelas perhitungan matematika dasar yang bernama kalkulator, yang didalam nya terdapat metod untuk melakukan operasi penambahan dan operasi pengurangan seperti yang ditunjukan pada script dibawah ini.
- <?php
- class kalkulator
- {
- public function tambah($n1, $n2)
- {
- return $n1 + $n2;
- }
- public function kurang($n1, $n2)
- {
- return $n1 - $n2;
- }
- }
- ?>
Sebagai contoh class tersebut disimpan dengan file bernama kalkulator.php
*2*. Kemudian dilakukan Unit Testing pada seluruh metod yang terdapat pada kelas kalkulator,
dengan cara memberikan berbagai inputan pada metod tersebut dan melihat
output yang diberikan oleh metod tersebut, apabila output yang
dihasilkan metod sesuai dengan harapan maka metod tersebut telah
berfungsi dengan baik.
Seperti yang di tunjukan dengan sekenario unit testing sederhana dibawah ini.
- <?php
- include 'kalkulator.php';
- $r[0] = array('nama'=>'Metod Tambah : Skenario 1, ', 'hasil' => '');
- $r[1] = array('nama'=>'Metod Tambah : Skenario 2, ', 'hasil' => '');
- $r[2] = array('nama'=>'Metod Kurang : Skenario 1, ', 'hasil' => '');
- $r[3] = array('nama'=>'Metod Kurang : Skenario 2, ', 'hasil' => '');
- $o = new kalkulator();
- $r[0]['hasil'] = ($o->tambah( 1,3) == 4 ) ? 'Berhasil' : 'Gagal';
- $r[1]['hasil'] = ($o->tambah(-2,3) == 1 ) ? 'Berhasil' : 'Gagal';
- $r[2]['hasil'] = ($o->kurang( 3,1) == 2 ) ? 'Berhasil' : 'Gagal';
- $r[3]['hasil'] = ($o->kurang(-5,3) == -8) ? 'Berhasil' : 'Gagal';
- foreach($r as $val) {
- echo $val['nama'].$val['hasil']."\n";
- }
- ?>
Kemudian simpan kode program unit testing diatas dengan nama kalkulatorTest.php
*3*. Ketika skenario unit testing di atas dijalankan pada command line akan menampilkan hasil seperti dibawah ini.
- php kalkulatorTest.php
- Metod Tambah : Skenario 1, Berhasil
- Metod Tambah : Skenario 2, Berhasil
- Metod Kurang : Skenario 1, Berhasil
- Metod Kurang : Skenario 2, Berhasil
Framework Symfony Versi 1.2 - Unit Testing
Pada Framework Symfony Versi
1.2 telah dilengkapi secara build up dengan fitur Unit Testing, Berikut
ini adalah contoh melakukan unit testing pada Symfony Framework Versi
1.2.
Sebelumnya diasumsikan telah mengenal cara instalasi dan membuat aplikasi serta module pada symfony framework 1.2 -
*1*. Sebagai contoh akan dibuat dua kelas yang memiliki tanggung jawab sebagai perhitungan matematika dasar dan untuk menghitung luas sebuah bangunan.
a. Membuat Kelas Hitung untuk melakukan perhitungan dasar matematika
- <?php
- class hitung
- {
- public function tambah($n1, $n2)
- {
- return $n1 + $n2;
- }
- public function kurang($n1, $n2)
- {
- return $n1 - $n2;
- }
- }
- ?>
Kemudian simpan class tersebut dengan file bernama hitung.php
b. Membuat Kelas Hitung Luas untuk menghitung luas bangunan
- <?php
- class hitungLuas
- {
- public function luasPersegi($panjang, $lebar)
- {
- return $panjang * $lebar;
- }
- public function luasLingkaran($jari2)
- {
- return 3.14 * ($jari2 * $jari2);
- }
- }
- ?>
Kemudian simpan class tersebut dengan file bernama hitungLuas.php
*2*. Sebagai contoh simpan kedua kelas tersebut di direktori lib, seperti yang ditunjukan pada gambar dibawah ini.
*3*. Membuat skenario testing menggunakan fitur unit testing Symfony 1.2.
Buatlah file testing untuk kelas hitung dengan nama hitungTest.php dan kelas hitungLuas dengan nama hitungLuasTest.php di direktori test/unit seperti yang ditunjukan pada gambar dibawah ini.
*4*. Pada file hitungTest.php tuliskan skenario testing untuk kelas hitung seperti yang ditunjukan dibawah ini.
- <?php
- include(dirname(__FILE__).'/../bootstrap/unit.php');
- include(dirname(__FILE__).'/../../lib/hitung.php');
- $o = new hitung();
- $t = new lime_test(2, new lime_output_color());
- $t->is($o->tambah(3,2),5,'Test Metod tambah - Apabila menghasilkan angka 5 artinya testing OK');
- $t->is($o->kurang(3,2),1,'Test Metod kurang - Apabila menghasilkan angka 1 artinya testing OK');
- ?>
* Mengartikan memanggil lib symfony untuk melakukan unit testing
- include(dirname(__FILE__).'/../bootstrap/unit.php');
* Mengartikan memanggil kelas hitung yang tersimpan pada file bernama hitung.php
- include(dirname(__FILE__).'/../../lib/hitung.php');
* Mengartikan membuat objek hitung dari kelas hitung
- $o = new hitung();
* Mengartikan membuat objek testing yang merupakan engine untuk melakukan unit testing
- $t = new lime_test(2, new lime_output_color());
* Mengartikan proses testing yang dilakukan pada metod tambah dan metod kurang dari class hitung
- $t->is($o->tambah(3,2),5,'Test Metod tambah - Apabila menghasilkan angka 5 artinya testing OK'); $t->is($o->kurang(3,2),1,'Test Metod kurang - Apabila menghasilkan angka 1 artinya testing OK');
- php symfony test:unit hitung
- 1..1
- ok 1 - Test Metod tambah - Apabila menghasilkan angka 5 artinya testing OK
- ok 2 - Test Metod kurang - Apabila menghasilkan angka 1 artinya testing OK
*5*. Pada file hitungLuasTest.php tuliskan skenario testing untuk kelas hitungLuas seperti yang ditunjukan dibawah ini.
- <?php
- include(dirname(__FILE__).'/../bootstrap/unit.php');
- include(dirname(__FILE__).'/../../lib/hitungLuas.php');
- $o = new hitungLuas();
- $t = new lime_test(2, new lime_output_color());
- $t->is($o->luasPersegi(4,5),20,'Test Metod luas persegi - Apabila menghasilkan angka 20 artinya testing OK');
- $t->is($o->luasLingkaran(3),28.26,'Test Metod luas lingkaran - Apabila menghasilkan angka 28.26 artinya testing OK');
- ?>
- php symfony test:unit hitungLuas
- 1..2
- ok 1 - Test Metod luas persegi - Apabila menghasilkan angka 20 artinya testing OK
- ok 2 - Test Metod luas lingkaran - Apabila menghasilkan angka 28.26 artinya testing OK
*6*. Untuk menjalankan seluruh testing dapat menggunakan cara seperti dibawah ini.
- php symfony test:unit
- hitungLuasTest.......................................................ok
- hitungTest...........................................................ok
- All tests successful.
- Files=2, Tests=4
*7*. Apabila terjadi error dari proses unit testing maka akan tampil seperti ini.
- hitungLuasTest.......................................................not ok
- Failed tests: 1
- hitungTest...........................................................ok
- Failed Test Stat Total Fail List of Failed
- ------------------------------------------------------------------
- hitungLuasTest 0 2 1 1
- Failed 1/2 test scripts, 50.00% okay. 1/4 subtests failed, 75.00% okay.
Report tersebut menunjukan terjadi error pada unit testing di hitungLuasTest.
Untuk mengetahui detail dari error tersebut dapat menggunakan cara seperti dibawah ini.
- php symfony test:unit hitungLuas
- not ok 1 - Test Metod luas persegi - Apabila menghasilkan angka 20 artinya testing OK
- # Failed test (./test/unit/hitungLuasTest.php at line 8)
- # got: 0
- # expected: 20
Pada gambar di atas menunjukan bahwa output benar yang diharapkan adalah 20 berdasarkan inputan yang diberikan tetapi yang dapatkan adalah 0.
Hal tersebut mengartikan tarjadi kesalahan pada kode program dari metod yang di testing.
*8*. Dalam sebuah testing yang
berkaitan dengan proses database seperti input data, update data dan
hapus data maka diperlukan sebuah enviroment testing agar database yang
digunakan testing adalah khusus untuk aktivitas testing.
Berikut ini adalah contoh cara menambahkan enviroment dalam unit testing.
Berikut ini adalah contoh cara menambahkan enviroment dalam unit testing.
- <?php
- $configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'test', true);
- sfContext::createInstance($configuration);
- new sfContext($configuration);
- include(dirname(__FILE__).'/../bootstrap/unit.php');
- include(dirname(__FILE__).'/../../lib/hitungLuas.php');
- $o = new hitungLuas();
- $t = new lime_test(2, new lime_output_color());
- $t->is($o->luasPersegi(4,5),20,'Test Metod luas persegi - Apabila menghasilkan angka 20 artinya testing OK');
- $t->is($o->luasLingkaran(3),28.26,'Test Metod luas lingkaran - Apabila menghasilkan angka 28.26 artinya testing OK');
- ?>
- $configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'test', true);
- sfContext::createInstance($configuration);
- new sfContext($configuration);
Perintah diatas mengartikan mengartikan menggunakan aplikasi bernama frontend dengan enviroment test.
Berikut ini daftar method yang dapat digunakan dalam melakukan unit testing di symfony 1.2
Method | Description |
---|---|
diag($msg) | Outputs a comment but runs no test |
ok($test, $msg) | Tests a condition and passes if it is true |
is($value1, $value2, $msg) | Compares two values and passes if they are equal (==) |
isnt($value1, $value2, $msg) | Compares two values and passes if they are not equal |
like($string, $regexp, $msg) | Tests a string against a regular expression |
unlike($string, $regexp, $msg) | Checks that a string doesn't match a regular expression |
cmp_ok($value1, $operator, $value2, $msg) | Compares two arguments with an operator |
isa_ok($variable, $type, $msg) | Checks the type of an argument |
isa_ok($object, $class, $msg) | Checks the class of an object |
can_ok($object, $method, $msg) | Checks the availability of a method for an object or a class |
is_deeply($array1, $array2, $msg) | Checks that two arrays have the same values |
include_ok($file, $msg) | Validates that a file exists and that it is properly included |
fail() | Always fails--useful for testing exceptions |
pass() | Always passes--useful for testing exceptions |
skip($msg, $nb_tests) | Counts as $nb_tests tests--useful for conditional tests |
todo() | Counts as a test--useful for tests yet to be written |
sumber : http://dendieisme.blogspot.com
…Semoga Bermanfaat… !.Semoga Sukses.! .send komentar ya.
{ 0 komentar... read them below or add one }
Posting Komentar
terima kasih telah berkunjung sobat.
Silahkan komentar,kritik dan sarannya
setidaknya tegur sapa.heheh