0% menganggap dokumen ini bermanfaat (0 suara)
375 tayangan32 halaman

Testing PHPUnit

Dokumen tersebut membahas tentang pengujian fungsi validasi inputan stok barang dan penjualan menggunakan PHPUnit. Secara garis besar dibahas tentang penginstalan PHPUnit, membuat kelas untuk pengujian validasi jumlah stok, dan membuat kelas-kelas untuk barang, item, diskon, dan penjualan.
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOC, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
375 tayangan32 halaman

Testing PHPUnit

Dokumen tersebut membahas tentang pengujian fungsi validasi inputan stok barang dan penjualan menggunakan PHPUnit. Secara garis besar dibahas tentang penginstalan PHPUnit, membuat kelas untuk pengujian validasi jumlah stok, dan membuat kelas-kelas untuk barang, item, diskon, dan penjualan.
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOC, PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 32

TESTING FUNGSI VALIDASI INPUTAN STOK BARANG DAN

PENJUALAN
(WHITE BOX TESTING MENGGUNAKAN PHPUNIT)
TUGAS TESTING DAN IMPLEMENTASI SISTEM

Oleh:

HIZKIA YESARELA SAHADUTA


NIM 12.51.0016

PROGRAM STUDI S1- TEKNIK INFORMATIKA

KEMENTERIAN RISTEK DAN PENDIDIKAN TINGGI


SEKOLAH TINGGI MANAJEMEN INFORMATIKA DAN KOMPUTER
PPKIA PRADNYA PARAMITA
MALANG
2016

TESTING FUNGSI VALIDASI INPUTAN STOK BARANG DAN


PENJUALAN
(WHITE BOX TESTING MENGGUNAKAN PHPUNIT)

1.

PHPUnit
PHPUnit adalah sebuah programmer-oriented testing framework untuk bahasa

pemrograman php, merupakan bagian dari xUnit untuk unit testing framework di
buat oleh Sebastian Bergmann5 , official web untuk PHPUnit adalah
http://phpunit.de/, versi terbaru adalah phpunit 5.1.3 untuk versi stable dan phpunit
5.2 untuk versi beta
Untuk installasi PHPUnit cukup mudah, ada banyak cara yang bisa dilakukan,
bisa melalui phar, pear atau composer. Disini hanya akan di jelaskan bagaimana
instalasi PHPunit di lwindows menggunakan composer
1.1

Installasi PHPUnit
Download dan install composer di https://getcomposer.org/Composer-

Setup.exe , lalu jalankan. Installer ototmasi merupakan versi composer yang paling
terbaru dan setelah kita selesei install secara otomastis pula sudah men-set PATH ,
sehingga bisa memanggil composer dari setiap direktori komputer menggunakan
command line .
Setelah selesei install , jalankan command seperti gambar di bawah ini untuk
memastikan phpunit sudah bisa kita gunakan. Apabila keluaran dari command yang

diketikan tidak seperti gambar di bawah ini , tutup command line , lalu buka lagi
command line yang baru dan ketikan command yang sama

2.

Menjalankan Testing
Di sini kita akan menjalankan testing dari fungsi validasi untuk inputan

sebuah form barang , dimana inputannya tidak boleh minus(-) dan harus merupakan
angka.
2.1

Membuat Class Untuk Testing Jumlah Stok


Pertama , kita membuat sebuah class stok dan simpan dengan nama stok.php.

Di class ini diletakkan juga skenario yang akan di pakai, sebagai berikut :
Inputan angka (lebih dari 0) -> getStok() (diharapkan:ok)
Inputan minus (kurang dari 0) -> getPesan() (diharapkan:ok)
Inputan huruf

-> getPesan() (diharapkan:ok)

Dan berikut listing kode programnya untuk class stok:


<?php
class stok{
private $_stok;
private $_pesan;
public function inputStok($stok){
if($stok < 0 || !is_numeric($stok)) {
$this->setPesan('Inputan Stok Salah');
}else{
$this->_stok = $stok;
}
}
public function getStok(){
return $this->_stok;
}
public function setPesan($pesan){
$this->_pesan = $pesan;
}
public function getPesan(){
return $this->_pesan;
}
}
?>
Kemudian kita buat 3 skema testing yaitu testing saat data berhasil dan testing saat
data yang di inputkan salah (minus atau berupa huruf), berikut listing kode
programnya :

A. Skenario :
Inputan angka (lebih dari 0) -> getStok() (diharapkan:ok)
Inputan minus (kurang dari 0) -> getStok() (diharapkan:nok)
Inputan huruf

-> getStok() (diharapkan:nok)

<?php
include 'stok.php';
class stoktes extends PHPUnit_Framework_TestCase{

public function setUp(){


$this->objStok = new stok();
}
public function testBerhasilInputStok(){
$this->objStok->inputStok(5);
$stok = $this->objStok->getStok();
$this->assertEquals(5,$stok);
}
public function testStokMinus(){
$this->objStok->inputStok(-5);
$stok = $this->objStok->getStok();
$this->assertEquals(-5,$stok);

}
public function testStokHuruf(){
$this->objStok->inputStok('Lima');
$stok = $this->objStok->getStok();
$this->assertEquals('Lima',$stok);
}

}
?>
B. Skenario :
Inputan angka (lebih dari 0) -> getPesan() (diharapkan:nok)
Inputan minus (kurang dari 0) -> getPesan() (diharapkan:ok)
Inputan huruf

-> getPesan() (diharapkan:ok)

<?php
include 'stok.php';
class stoktes extends PHPUnit_Framework_TestCase{

public function setUp(){


$this->objStok = new stok();
}
public function testBerhasilInputStok(){
$this->objStok->inputStok(5);
$pesan = $this->objStok->getPesan();
$this->assertEquals('Inputan Stok Salah',$pesan);
}
public function testStokMinus(){
$this->objStok->inputStok(-5);
$pesan = $this->objStok->getPesan();
$this->assertEquals('Inputan Stok Salah',$pesan);
}
public function testStokHuruf(){
$this->objStok->inputStok('Lima');
$pesan = $this->objStok->getPesan();
$this->assertEquals('Inputan Stok Salah',$pesan);
}

}
?>
C. Skenario :
Inputan angka (lebih dari 0) -> getStok() (diharapkan:ok)
Inputan minus (kurang dari 0) -> getPesan() (diharapkan:ok)
Inputan huruf

-> getPesan() (diharapkan:ok)

<?php
include 'stok.php';
class stoktes extends PHPUnit_Framework_TestCase{
public function setUp(){
$this->objStok = new stok();
}
public function testBerhasilInputStok(){
$this->objStok->inputStok(5);
$stok = $this->objStok->getStok();
$this->assertEquals(5,$stok);
}
public function testStokMinus(){
$this->objStok->inputStok(-5);
$pesan = $this->objStok->getPesan();
$this->assertEquals('Inputan Stok Salah',$pesan);
}
public function testStokHuruf(){
$this->objStok->inputStok('Lima');
$pesan = $this->objStok->getPesan();
$this->assertEquals('Inputan Stok Salah',$pesan);
}
}

?>
Kita kita simpan dengan nama stoktes.php dan harus satu direktori dengan file
stok.php yang sudah kita buat sebelumnya tadi.
2.2

Pengujian untuk Class stok.php


Selanjutnya adalah menguji class yang sudah kita buat tadi dengan

menggunakan PHPUnit , buka command line , lalu ketikan perintah


#phpunit stoktes.php
Untuk hasil detail ketikan :
#phpunit testdox stoktes.php
Dan berikut hasil pengujian dari masing masing skema yang sudah dibuat :
A. Skenario :
Inputan angka (lebih dari 0) -> getStok (diharapkan:ok)
Inputan minus (kurang dari 0) -> getStok (diharapkan:nok)
Inputan huruf

-> getStok (diharapkan:nok)

Hasil pengujian seperti gambar berikut :

Dan untuk detailnya seperti gambar berikut :

B. Skenario :
Inputan angka (lebih dari 0) -> getPesan (diharapkan:nok)
Inputan minus (kurang dari 0) -> getPesan (diharapkan:ok)
Inputan huruf

-> getPesan (diharapkan:ok)

Hasil pengujian seperti gambar berikut :

Dan untuk detailnya seperti gambar berikut :

C. Skenario :
Inputan angka (lebih dari 0) -> getStok (diharapkan:ok)
Inputan minus (kurang dari 0) -> getPesan (diharapkan:ok)
Inputan huruf

-> getPesan (diharapkan:ok)

Hasil pengujian seperti gambar berikut :

Dan untuk detailnya seperti gambar berikut :

2.3

Membuat Class Untuk Barang , Item , Diskon , dan Penjualan

A.

Class Barang

<?php
class Barang {
/**
* Nama barang
*
* @var string
*/
public $nama;
/**
* Harga barang
*
* @var double

*/
public $harga;
/**
*
* @param string $nama
* @param double $harga
*/
public function __construct($nama, $harga) {
$this->nama = $nama;
$this->harga = $harga;
}
}
?>
B.

Class Item

<?php
class Item {
/**
* Merujuk pada `Barang` yang diperdagangkan.
*
* @var Barang
*/
public $barang;
/**
* Jumlah yang diperdagangkan untuk `Barang` ini.
*
* @var int
*/
public $jumlah;

/**
* Harga yang disepakati untuk transaksi `Barang` ini.
*
* @var double
*/
public $harga;
/**
* Diskon untuk item ini.
*
* @var Diskon
*/
public $diskon;
/**
*
* @param Barang $barang
* @param int $jumlah
* @param double $harga
*/
public function __construct($barang, $jumlah, $harga = NULL, $diskon = NULL)
{
$this->barang = $barang;
$this->jumlah = $jumlah;
$this->harga = $harga?: $barang->harga;
$this->diskon = $diskon?: new Diskon();
}
/**
* Mengembalikan total harga untuk Item ini. Perhitungan dilakukan
* berdasarkan jumlah item * harga, kemudian dikurangi diskon.
*

* @return double
*/
public function getTotal() {
return $this->diskon->setelahDiskon($this->harga * $this->jumlah);
}
}
?>

C.

Class Diskon

<?php
class Diskon {
/**
* Sebuah array yang berisi nilai diskon untuk item ini.
* Sebuah item dapat memiliki lebih dari satu diskon, misalnya
* diskon member dan diskon promosi natal.
*
* Diskon dalam bentuk angka, misalnya 25 untuk 25%,
* 10 untuk 10% dan sebagainya.
*
* @var int[]
*/
public $arrDiskon;
/**
*
* @param int[] $arrDiskon
*/
public function __construct($arrDiskon = NULL) {

if ($arrDiskon == NULL) {
$this->arrDiskon = [];
} else if (is_array($arrDiskon)) {
$this->arrDiskon = $arrDiskon;
} else {
$this->arrDiskon = [$arrDiskon];
}
}

/**
* Menambah nilai diskon baru, misalnya 10 untuk 10% dan 25 untuk 25%.
*
* Bila nilai `diskon` berupa array, maka lebih dari satu nilai akan
* ditambahkan ke nilai diskon saat ini.
*
* @param mixed $diskon
*/
public function tambahDiskon($diskon) {
$this->arrDiskon[] = $diskon;
}
/**
* Menghitung jumlah diskon untuk sebuah harga. Sebagai contoh,
* diskon 10% untuk 100.000 akan mengembalikan nilai 10.000.
*
* @param double $harga
*/
public function jumlahDiskon($harga) {
$total = 0;

foreach ($this->arrDiskon as $diskon) {


if ($total==0) {
$total = $harga * ($diskon/100);
$harga -= $total;
} else {
$diskon = $harga * ($diskon/100);
$total += $diskon;
$harga -= $diskon;
}
}
return $total;
}
/**
* Menghitung sebuah harga setelah dikurangi diskon ini.
* Sebagai contoh, diskon 10% untuk 100.000 akan mengembalikan
* nilai 90.000.
*
* @param double $harga
*/
public function setelahDiskon($harga) {
if (count($this->arrDiskon)==0) return $harga;
$total = 0;
foreach ($this->arrDiskon as $diskon) {
if ($total==0) {
$total = $harga * (1 - $diskon/100);
} else {
$total *= (1 - $diskon/100);
}

}
return $total;
}
}
?>
D.

Class Penjualan

<?php
class Penjualan {
/**
* Nomor untuk faktur penjualan ini.
*
* @var string
*/
public $nomor;
/**
* Tanggal yang terterak di faktur.
*
* @var string
*/
public $tanggal;
/**
* Array yang berisi satu atau lebih `Item` untuk faktur ini.
*
* @var Item[]
*/
public $arrItem;
/**
* Diskon untuk penjualan ini.

*
* @var Diskon
*/
public $diskon;
/**
*
* @param string $nomor
* @param date $tanggal
*/
public function __construct($nomor, $tanggal, $diskon = NULL) {
$this->nomor = $nomor;
$this->tanggal = $tanggal;
$this->arrItem = [];
$this->diskon = $diskon?: new Diskon();
}
/**
* Menambah `Item` baru untuk penjualan ini.
*
* @param Item $item
*/
public function tambahItem($item) {
$this->arrItem[] = $item;
}
/**
* Mengembalikan total untuk transaksi ini.
*
* @return double
*/

public function getTotal() {


$total = 0;
foreach ($this->arrItem as $item) {
$total += $item->getTotal();
}
return $this->diskon->setelahDiskon($total);
}
}
?>
Kemudian kita buat 3 skema testing yaitu testing saat data berhasil dan testing saat
data salah berikut listing kode programnya :
Skema 1:
2 inputan barang (barang1 = 100000 , qty = 10) , (barang2 = 200000 , qty = 20)
Total harga tanpa diskon , expect : 5000000 , di coba matches : 700000
Source code :
<?php
include 'barang.php';
include 'item.php';
include 'diskon.php';
include 'penjualan.php';
class PenjualanTest extends PHPUnit_Framework_TestCase {
protected function setUp() {
parent::setUp ();
}
protected function tearDown() {
parent::tearDown ();
}

public function testTambahItem() {


$barang1 = new Barang("BRG-01", 1000);
$barang2 = new Barang("BRG-02", 2000);

$penjualan = new Penjualan("INV-01", "2016-01-01");


$penjualan->tambahItem(new Item($barang1, 5));
$penjualan->tambahItem(new Item($barang2, 5));

$this->assertCount(2, $penjualan->arrItem);
$this->assertEquals($barang1, $penjualan->arrItem[0]->barang);
$this->assertEquals(5, $penjualan->arrItem[0]->jumlah);
$this->assertEquals($barang2, $penjualan->arrItem[1]->barang);
$this->assertEquals(5, $penjualan->arrItem[1]->jumlah);
}

public function testGetTotaltanpaDiskon() {


$barang1 = new Barang("BRG-01", 100000);
$barang2 = new Barang("BRG-02", 200000);

$penjualan = new Penjualan("INV-01", "2016-01-01");


$penjualan->tambahItem(new Item($barang1, 10));
$penjualan->tambahItem(new Item($barang2, 20));
$this->assertEquals(700000, $penjualan->getTotal());
}

public function testGetTotaldenganDiskon() {


$barang1 = new Barang("BRG-01", 100000);

$barang2 = new Barang("BRG-02", 200000);

$penjualan = new Penjualan("INV-02", "2016-01-01", new Diskon(10));


$penjualan->tambahItem(new Item($barang1, 10));
$penjualan->tambahItem(new Item($barang2, 20));
$this->assertEquals(4500000, $penjualan->getTotal());
}
}
?>

Skema 2:
2 inputan barang (barang1 = 100000 , qty = 10) , (barang2 = 200000 , qty = 20)
Total harga dengan diskon 10% , expect : 4500000 , di coba matches : 5000000
Source code :
<?php
include 'barang.php';
include 'item.php';
include 'diskon.php';
include 'penjualan.php';
class PenjualanTest extends PHPUnit_Framework_TestCase {
protected function setUp() {
parent::setUp ();
}
protected function tearDown() {
parent::tearDown ();
}

public function testTambahItem() {

$barang1 = new Barang("BRG-01", 1000);


$barang2 = new Barang("BRG-02", 2000);

$penjualan = new Penjualan("INV-01", "2016-01-01");


$penjualan->tambahItem(new Item($barang1, 5));
$penjualan->tambahItem(new Item($barang2, 5));

$this->assertCount(2, $penjualan->arrItem);
$this->assertEquals($barang1, $penjualan->arrItem[0]->barang);
$this->assertEquals(5, $penjualan->arrItem[0]->jumlah);
$this->assertEquals($barang2, $penjualan->arrItem[1]->barang);
$this->assertEquals(5, $penjualan->arrItem[1]->jumlah);
}

public function testGetTotaltanpaDiskon() {


$barang1 = new Barang("BRG-01", 100000);
$barang2 = new Barang("BRG-02", 200000);

$penjualan = new Penjualan("INV-01", "2016-01-01");


$penjualan->tambahItem(new Item($barang1, 10));
$penjualan->tambahItem(new Item($barang2, 20));
$this->assertEquals(5000000, $penjualan->getTotal());
}

public function testGetTotaldenganDiskon() {


$barang1 = new Barang("BRG-01", 100000);
$barang2 = new Barang("BRG-02", 200000);

$penjualan = new Penjualan("INV-02", "2016-01-01", new Diskon(10));


$penjualan->tambahItem(new Item($barang1, 10));
$penjualan->tambahItem(new Item($barang2, 20));
$this->assertEquals(5000000, $penjualan->getTotal());
}
}
?>

Skema 3:
2 inputan barang (barang1 = 100000 , qty = 10) , (barang2 = 200000 , qty = 20)
Di inputkan tanpa harga barang, expect : arg missing
Source code :
<?php
include 'barang.php';
include 'item.php';
include 'diskon.php';
include 'penjualan.php';
class PenjualanTest extends PHPUnit_Framework_TestCase {
protected function setUp() {
parent::setUp ();
}
protected function tearDown() {
parent::tearDown ();
}

public function testTambahItem() {


$barang1 = new Barang("BRG-01");
$barang2 = new Barang("BRG-02");

$penjualan = new Penjualan("INV-01", "2016-01-01");


$penjualan->tambahItem(new Item($barang1, 5));
$penjualan->tambahItem(new Item($barang2, 5));

$this->assertCount(2, $penjualan->arrItem);
$this->assertEquals($barang1, $penjualan->arrItem[0]->barang);
$this->assertEquals(5, $penjualan->arrItem[0]->jumlah);
$this->assertEquals($barang2, $penjualan->arrItem[1]->barang);
$this->assertEquals(5, $penjualan->arrItem[1]->jumlah);
}

public function testGetTotaltanpaDiskon() {


$barang1 = new Barang("BRG-01", 100000);
$barang2 = new Barang("BRG-02", 200000);

$penjualan = new Penjualan("INV-01", "2016-01-01");


$penjualan->tambahItem(new Item($barang1, 10));
$penjualan->tambahItem(new Item($barang2, 20));
$this->assertEquals(5000000, $penjualan->getTotal());
}

public function testGetTotaldenganDiskon() {


$barang1 = new Barang("BRG-01", 100000);
$barang2 = new Barang("BRG-02", 200000);

$penjualan = new Penjualan("INV-02", "2016-01-01", new Diskon(10));


$penjualan->tambahItem(new Item($barang1, 10));

$penjualan->tambahItem(new Item($barang2, 20));


$this->assertEquals(4500000, $penjualan->getTotal());
}
}
?>
Skema 4:
All true excpectation
Source code :
<?php
include 'barang.php';
include 'item.php';
include 'diskon.php';
include 'penjualan.php';
class PenjualanTest extends PHPUnit_Framework_TestCase {

protected function setUp() {


parent::setUp ();
}

protected function tearDown() {


parent::tearDown ();
}

public function testTambahItem() {


$barang1 = new Barang("BRG-01", 1000);
$barang2 = new Barang("BRG-02", 2000);

$penjualan = new Penjualan("INV-01", "2016-01-01");

$penjualan->tambahItem(new Item($barang1, 5));


$penjualan->tambahItem(new Item($barang2, 5));

$this->assertCount(2, $penjualan->arrItem);
$this->assertEquals($barang1, $penjualan->arrItem[0]->barang);
$this->assertEquals(5, $penjualan->arrItem[0]->jumlah);
$this->assertEquals($barang2, $penjualan->arrItem[1]->barang);
$this->assertEquals(5, $penjualan->arrItem[1]->jumlah);
}

public function testGetTotaltanpaDiskon() {


$barang1 = new Barang("BRG-01", 100000);
$barang2 = new Barang("BRG-02", 200000);

$penjualan = new Penjualan("INV-01", "2016-01-01");


$penjualan->tambahItem(new Item($barang1, 10));
$penjualan->tambahItem(new Item($barang2, 20));
$this->assertEquals(5000000, $penjualan->getTotal());
}

public function testGetTotaldenganDiskon() {


$barang1 = new Barang("BRG-01", 100000);
$barang2 = new Barang("BRG-02", 200000);

$penjualan = new Penjualan("INV-02", "2016-01-01", new Diskon(10));


$penjualan->tambahItem(new Item($barang1, 10));
$penjualan->tambahItem(new Item($barang2, 20));
$this->assertEquals(4500000, $penjualan->getTotal());

}
}
?>
2.4

Pengujian Penjualan
Selanjutnya adalah menguji class yang sudah kita buat tadi dengan

menggunakan PHPUnit , buka command line , lalu ketikan perintah


#phpunit penjualan.php
Untuk hasil detail ketikan :
#phpunit testdox penjualantes.php
Dan berikut hasil pengujian dari masing masing skema yang sudah dibuat :
Skema 1:
2 inputan barang (barang1 = 100000 , qty = 10) , (barang2 = 200000 , qty = 20)
Total harga tanpa diskon , matches : 5000000 , di coba expect : 700000
Hasil testing :

Skema 2:
2 inputan barang (barang1 = 100000 , qty = 10) , (barang2 = 200000 , qty = 20)
Total harga dengan diskon 10% , matches : 4500000 , di coba expect : 5000000
Hasil testing :

Skema 3:
2 inputan barang (barang1 = 100000 , qty = 10) , (barang2 = 200000 , qty = 20)
Di inputkan tanpa harga barang, expect : arg missing
Hasil testing :

Skema 4:
All true excpectation
Hasil testing :

3. Kesimpulan
1)

Sebelum melakukan test menggunakan PHPUnit, pastikan dahulu untuk class

yang akan diuji terdapat extends PHPUnit_Framework_TestCase


2)

Untuk assertions ada beberapa tipe sesuai dengan apa yang digunakan,

semisal untuk nilai yang sama maka menggunakan assertEquals, untuk cek hanya tipe
data tertentu menggunakan assertContainsOnly, untuk cek jumlah data menggunakan
assertCount, dan masih banyak jenis assertions lainnya.
3)

Data yang tidak mempunyai assertions tetap dapat dilakukan proses testing,

tetapi akan muncuk peringatan tidak ada test yang dapat dilakukan.
4)

PHPUnit menghitung waktu untuk load data yang di test dan juga memory

yang digunakan saat syntax tersebut berjalan. Jika muncul kesalahan, maka muncul

juga apa yang membuat file tersebut melakukan kesalahan. Jika benar, maka tidak
muncul satupun peringatan atau pesan kesalahan.
5)

Testing menggunakan PHPUnit memungkinkan agar sebuah

software sudah melewati fase testing di awal, maka problem-problem yang mungkin
terjadi pasca produksi bisa di ketahui sejak awal, dan ketika terjadi perubahan maka
dapat di deteksi efffect dari perubahan tersebut sehingga tidak menimbulkan riffle
effect, keretakan software (fragile), hard code yang membuat proses development,
maintenance software menjadi rumit dan memakan waktu , karena satu persatu setiap
fungsi , class dapat dites menggunakan method yang berbeda beda untuk setiap 1
fungsi / class.

Anda mungkin juga menyukai