Download - Testing PHPUnit
-
7/23/2019 Testing PHPUnit
1/32
TESTINGFUNGSI VALIDASI INPUTAN STOK BARANG DAN
PENJUALAN
(WHITE BOXTESTING MENGGUNAKAN PHPUNIT)
TUGAS TESTING DAN IMPLEMENTASI SISTEM
Oleh:
HIZKIA YESARELA SAHADUTA
NIM 12!1""1#
PROGRAM STUDI S1$ TEKNIK INFORMATIKA
KEMENTERIAN RISTEK DAN PENDIDIKAN TINGGI
SEKOLAH TINGGI MANAJEMEN INFORMATIKA DAN KOMPUTER
PPKIA PRADNYA PARAMITA
MALANG
2"1#
-
7/23/2019 Testing PHPUnit
2/32
TESTINGFUNGSI VALIDASI INPUTAN STOK BARANG DAN
PENJUALAN
(WHITE BOXTESTING MENGGUNAKAN PHPUNIT)
1 PHPU%&'
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, "ersi terbaru adalah phpunit 5!#!$ untuk "ersi stable dan phpunit
5!% untuk "ersi beta
Untuk installasi PHPUnit cukup mudah, ada ban&ak cara &ang bisa dilakukan,
bisa melalui phar, pear atau composer! 'isini han&a akan di (elaskan bagaimana
instalasi PHPunit di lwindows menggunakan composer
11 I%'ll& PHPU%&'
'ownload dan install composer di https:getcomposer!org)omposer-
Setup!exe , lalu (alankan! *nstaller ototmasi merupakan "ersi composer &ang paling
terbaru dan setelah kita selesei install secara otomastis pula sudah men-set P+H ,
sehingga bisa memanggil composer dari setiap direktori komputer menggunakan
command line !
Setelah selesei install , (alankan command seperti gambar di bawah ini untuk
memastikan phpunit sudah bisa kita gunakan! +pabila keluaran dari command &ang
-
7/23/2019 Testing PHPUnit
3/32
diketikan tidak seperti gambar di bawah ini , tutup command line , lalu buka lagi
command line &ang baru dan ketikan command &ang sama
2 Me%*l%+% Te'&%,
'i sini kita akan men(alankan testing dari fungsi "alidasi untuk inputan
sebuah form barang , dimana inputann&a tidak boleh minus-. dan harus merupakan
angka!
21 Me-./' 0l U%'/+ Te'&%, J/-lh S'+
Pertama , kita membuat sebuah class stok dan simpan dengan nama stok!php!
'i class ini diletakkan (uga skenario &ang akan di pakai, sebagai berikut :
*nputan angka lebih dari /. -0 ,e'S'+() (&h34+%:+)
*nputan minus kurang dari /. -0 ,e'Pe%() (&h34+%:+)
*nputan huruf -0 ,e'Pe%() (&h34+%:+)
-
7/23/2019 Testing PHPUnit
4/32
'an berikut listing kode programn&a untuk class stok:
12php
class stok3pri"ate 4stok6
pri"ate 4pesan6
public function inputStok4stok.3
if4stok 1 / 77 8isnumeric4stok.. 3
4this-0setPesan9*nputan Stok Salah9.6
else3
4this-0stok ; 4stok6
public function getStok.3
return 4this-0stok6
public function setPesan4pesan.3
4this-0pesan ; 4pesan6
public function getPesan.3
return 4this-0pesan6
20
-
7/23/2019 Testing PHPUnit
5/32
A Skenario :
*nputan angka lebih dari /. -0 ,e'S'+() (&h34+%:+)
*nputan minus kurang dari /. -0 ,e'S'+() (&h34+%:%+)
*nputan huruf -0 ,e'S'+() (&h34+%:%+)
12php
include 9stok!php96
class stoktes extends PHPUnit=rameworkest)ase3
public function setUp.3
4this-0ob(Stok ; new stok.6
public function testBerhasil*nputStok.3
4this-0ob(Stok-0inputStok5.6
4stok ; 4this-0ob(Stok-0getStok.6
4this-0assert>?uals5,4stok.6
public function [email protected]
4this-0ob(Stok-0inputStok-5.6
4stok ; 4this-0ob(Stok-0getStok.6
4this-0assert>?uals-5,4stok.6
public function testStokHuruf.3
4this-0ob(Stok-0inputStok9Aima9.6
4stok ; 4this-0ob(Stok-0getStok.6
4this-0assert>?uals9Aima9,4stok.6
-
7/23/2019 Testing PHPUnit
6/32
20
B Skenario :
*nputan angka lebih dari /. -0 ,e'Pe%() (&h34+%:%+)
*nputan minus kurang dari /. -0 ,e'Pe%() (&h34+%:+)
*nputan huruf -0 ,e'Pe%() (&h34+%:+)
12php
include 9stok!php96
class stoktes extends PHPUnit=rameworkest)ase3
public function setUp.3
4this-0ob(Stok ; new stok.6
public function testBerhasil*nputStok.3
4this-0ob(Stok-0inputStok5.6
4pesan ; 4this-0ob(Stok-0getPesan.6
4this-0assert>?uals9*nputan Stok Salah9,4pesan.6
public function [email protected]
4this-0ob(Stok-0inputStok-5.6
4pesan ; 4this-0ob(Stok-0getPesan.6
4this-0assert>?uals9*nputan Stok Salah9,4pesan.6
public function testStokHuruf.3
4this-0ob(Stok-0inputStok9Aima9.6
4pesan ; 4this-0ob(Stok-0getPesan.6
4this-0assert>?uals9*nputan Stok Salah9,4pesan.6
-
7/23/2019 Testing PHPUnit
7/32
20
0 Skenario :
*nputan angka lebih dari /. -0 ,e'S'+() (&h34+%:+)
*nputan minus kurang dari /. -0 ,e'Pe%() (&h34+%:+)
*nputan huruf -0 ,e'Pe%() (&h34+%:+)
12php
include 9stok!php96
class stoktes extends PHPUnit=rameworkest)ase3
public function setUp.3
4this-0ob(Stok ; new stok.6
public function testBerhasil*nputStok.3
4this-0ob(Stok-0inputStok5.6
4stok ; 4this-0ob(Stok-0getStok.6
4this-0assert>?uals5,4stok.6
public function [email protected]
4this-0ob(Stok-0inputStok-5.6
4pesan ; 4this-0ob(Stok-0getPesan.6
4this-0assert>?uals9*nputan Stok Salah9,4pesan.6
public function testStokHuruf.3
4this-0ob(Stok-0inputStok9Aima9.6
4pesan ; 4this-0ob(Stok-0getPesan.6
4this-0assert>?uals9*nputan Stok Salah9,4pesan.6
-
7/23/2019 Testing PHPUnit
8/32
20
-
7/23/2019 Testing PHPUnit
9/32
'an untuk detailn&a seperti gambar berikut :
B Skenario :
*nputan angka lebih dari /. -0 ,e'Pe% (&h34+%:%+)
*nputan minus kurang dari /. -0 ,e'Pe% (&h34+%:+)
*nputan huruf -0 ,e'Pe% (&h34+%:+)
-
7/23/2019 Testing PHPUnit
10/32
Hasil pengu(ian seperti gambar berikut :
'an untuk detailn&a seperti gambar berikut :
-
7/23/2019 Testing PHPUnit
11/32
0 Skenario :
*nputan angka lebih dari /. -0 ,e'S'+ (&h34+%:+)
*nputan minus kurang dari /. -0 ,e'Pe% (&h34+%:+)
*nputan huruf -0 ,e'Pe% (&h34+%:+)
Hasil pengu(ian seperti gambar berikut :
'an untuk detailn&a seperti gambar berikut :
-
7/23/2019 Testing PHPUnit
12/32
28 Me-./' 0l U%'/+ B3%, 9 I'e- 9 D&+% 9 % Pe%*/l%
A 0l B3%,
12php
class Barang 3
Cama barang
D"ar string
public 4nama6
Harga barang
D"ar double
-
7/23/2019 Testing PHPUnit
13/32
public 4harga6
Dparam string 4nama
Dparam double 4harga
public function construct4nama, 4harga. 3
4this-0nama ; 4nama6
4this-0harga ; 4harga6
20
B 0l I'e-
12php
class *tem 3
@eru(uk pada EBarangE &ang diperdagangkan!
D"ar Barang
public 4barang6
Fumlah &ang diperdagangkan untuk EBarangE ini!
D"ar int
public 4(umlah6
-
7/23/2019 Testing PHPUnit
14/32
Harga &ang disepakati untuk transaksi EBarangE ini!
D"ar double
public 4harga6
'iskon untuk item ini!
D"ar 'iskon
public 4diskon6
Dparam Barang 4barang
Dparam int 4(umlah
Dparam double 4harga
public function construct4barang, 4(umlah, 4harga ; CUAA, 4diskon ; CUAA.3
4this-0barang ; 4barang6
4this-0(umlah ; 4(umlah6
4this-0harga ; 4harga2: 4barang-0harga6
4this-0diskon ; 4diskon2: new 'iskon.6
@engembalikan total harga untuk *tem ini! Perhitungan dilakukan
berdasarkan (umlah item harga, kemudian dikurangi diskon!
-
7/23/2019 Testing PHPUnit
15/32
Dreturn double
public function getotal. 3
return 4this-0diskon-0setelah'iskon4this-0harga 4this-0(umlah.6
20
0 0l D&+%
12php
class 'iskon 3
Sebuah arra& &ang berisi nilai diskon untuk item ini!
Sebuah item dapat memiliki lebih dari satu diskon, misaln&a
diskon member dan diskon promosi natal!
'iskon dalam bentuk angka, misaln&a %5 untuk %5G,
#/ untuk #/G dan sebagain&a!
D"ar intI
public 4arr'iskon6
Dparam intI 4arr'iskon
public function construct4arr'iskon ; CUAA. 3
-
7/23/2019 Testing PHPUnit
16/32
if 4arr'iskon ;; CUAA. 3
4this-0arr'iskon ; I6
else if isarra&4arr'iskon.. 3
4this-0arr'iskon ; 4arr'iskon6
else 3
4this-0arr'iskon ; 4arr'iskonI6
@enambah nilai diskon baru, misaln&a #/ untuk #/G dan %5 untuk %5G!
Bila nilai EdiskonE berupa arra&, maka lebih dari satu nilai akan
ditambahkan ke nilai diskon saat ini!
Dparam mixed 4diskon
public function tambah'iskon4diskon. 3
4this-0arr'iskonI ; 4diskon6
@enghitung (umlah diskon untuk sebuah harga! Sebagai contoh,
diskon #/G untuk #//!/// akan mengembalikan nilai #/!///!
Dparam double 4harga
public function (umlah'iskon4harga. 3
4total ; /6
-
7/23/2019 Testing PHPUnit
17/32
foreach 4this-0arr'iskon as 4diskon. 3
if 4total;;/. 3
4total ; 4harga 4diskon#//.6
4harga -; 4total6
else 3
4diskon ; 4harga 4diskon#//.6
4total J; 4diskon6
4harga -; 4diskon6
return 4total6
@enghitung sebuah harga setelah dikurangi diskon ini!
Sebagai contoh, diskon #/G untuk #//!/// akan mengembalikan
nilai K/!///!
Dparam double 4harga
public function setelah'iskon4harga. 3
if count4this-0arr'iskon.;;/. return 4harga6
4total ; /6
foreach 4this-0arr'iskon as 4diskon. 3
if 4total;;/. 3
4total ; 4harga # - 4diskon#//.6
else 3
4total ; # - 4diskon#//.6
-
7/23/2019 Testing PHPUnit
18/32
return 4total6
20
D 0l Pe%*/l%
12php
class Pen(ualan 3
Comor untuk faktur pen(ualan ini!
D"ar string
public 4nomor6
anggal &ang terterak di faktur!
D"ar string
public 4tanggal6
+rra& &ang berisi satu atau lebih E*temE untuk faktur ini!
D"ar *temI
public 4arr*tem6
'iskon untuk pen(ualan ini!
-
7/23/2019 Testing PHPUnit
19/32
-
7/23/2019 Testing PHPUnit
20/32
public function getotal. 3
4total ; /6
foreach 4this-0arr*tem as 4item. 3
4total J; 4item-0getotal.6
return 4this-0diskon-0setelah'iskon4total.6
20
-
7/23/2019 Testing PHPUnit
21/32
public function testambah*tem. 3
4barang# ; new BarangMBNO-/#M, #///.6
4barang% ; new BarangMBNO-/%M, %///.6
4pen(ualan ; new Pen(ualanM*C-/#M, M%/#Q-/#-/#M.6
4pen(ualan-0tambah*temnew *tem4barang#, 5..6
4pen(ualan-0tambah*temnew *tem4barang%, 5..6
4this-0assert)ount%, 4pen(ualan-0arr*tem.6
4this-0assert>?uals4barang#, 4pen(ualan-0arr*tem/I-0barang.6
4this-0assert>?uals5, 4pen(ualan-0arr*tem/I-0(umlah.6
4this-0assert>?uals4barang%, 4pen(ualan-0arr*tem#I-0barang.6
4this-0assert>?uals5, 4pen(ualan-0arr*tem#I-0(umlah.6
public function testOetotaltanpa'iskon. 3
4barang# ; new BarangMBNO-/#M, #/////.6
4barang% ; new BarangMBNO-/%M, %/////.6
4pen(ualan ; new Pen(ualanM*C-/#M, M%/#Q-/#-/#M.6
4pen(ualan-0tambah*temnew *tem4barang#, #/..6
4pen(ualan-0tambah*temnew *tem4barang%, %/..6
4this-0assert>?ualsL/////, 4pen(ualan-0getotal..6
public function testOetotaldengan'iskon. 3
4barang# ; new BarangMBNO-/#M, #/////.6
-
7/23/2019 Testing PHPUnit
22/32
4barang% ; new BarangMBNO-/%M, %/////.6
4pen(ualan ; new Pen(ualanM*C-/%M, M%/#Q-/#-/#M, new 'iskon#/..6
4pen(ualan-0tambah*temnew *tem4barang#, #/..6
4pen(ualan-0tambah*temnew *tem4barang%, %/..6
4this-0assert>?ualsR5/////, 4pen(ualan-0getotal..6
20
S+e- 2:
% inputan barang barang# ; #///// , ?t& ; #/. , barang% ; %///// , ?t& ; %/.
otal harga dengan diskon #/G , expect : R5///// , di coba matches : 5//////
Source code :
12php
include 9barang!php96
include 9item!php96include 9diskon!php96
include 9pen(ualan!php96
class Pen(ualanest extends PHPUnit=rameworkest)ase 3
protected function setUp. 3
parent::setUp .6
protected function tear'own. 3 parent::tear'own .6
public function testambah*tem. 3
-
7/23/2019 Testing PHPUnit
23/32
4barang# ; new BarangMBNO-/#M, #///.6
4barang% ; new BarangMBNO-/%M, %///.6
4pen(ualan ; new Pen(ualanM*C-/#M, M%/#Q-/#-/#M.6
4pen(ualan-0tambah*temnew *tem4barang#, 5..6
4pen(ualan-0tambah*temnew *tem4barang%, 5..6
4this-0assert)ount%, 4pen(ualan-0arr*tem.6
4this-0assert>?uals4barang#, 4pen(ualan-0arr*tem/I-0barang.6
4this-0assert>?uals5, 4pen(ualan-0arr*tem/I-0(umlah.6
4this-0assert>?uals4barang%, 4pen(ualan-0arr*tem#I-0barang.6
4this-0assert>?uals5, 4pen(ualan-0arr*tem#I-0(umlah.6
public function testOetotaltanpa'iskon. 3
4barang# ; new BarangMBNO-/#M, #/////.6
4barang% ; new BarangMBNO-/%M, %/////.6
4pen(ualan ; new Pen(ualanM*C-/#M, M%/#Q-/#-/#M.6
4pen(ualan-0tambah*temnew *tem4barang#, #/..6
4pen(ualan-0tambah*temnew *tem4barang%, %/..6
4this-0assert>?uals5//////, 4pen(ualan-0getotal..6
public function testOetotaldengan'iskon. 3
4barang# ; new BarangMBNO-/#M, #/////.6
4barang% ; new BarangMBNO-/%M, %/////.6
-
7/23/2019 Testing PHPUnit
24/32
4pen(ualan ; new Pen(ualanM*C-/%M, M%/#Q-/#-/#M, new 'iskon#/..6
4pen(ualan-0tambah*temnew *tem4barang#, #/..6
4pen(ualan-0tambah*temnew *tem4barang%, %/..6
4this-0assert>?uals5//////, 4pen(ualan-0getotal..6
20
S+e- 8:
% inputan barang barang# ; #///// , ?t& ; #/. , barang% ; %///// , ?t& ; %/.'i inputkan tanpa harga barang, expect : arg missing
Source code :
12php
include 9barang!php96
include 9item!php96
include 9diskon!php96
include 9pen(ualan!php96class Pen(ualanest extends PHPUnit=rameworkest)ase 3
protected function setUp. 3
parent::setUp .6
protected function tear'own. 3
parent::tear'own .6
public function testambah*tem. 3
4barang# ; new BarangMBNO-/#M.6
4barang% ; new BarangMBNO-/%M.6
-
7/23/2019 Testing PHPUnit
25/32
4pen(ualan ; new Pen(ualanM*C-/#M, M%/#Q-/#-/#M.6
4pen(ualan-0tambah*temnew *tem4barang#, 5..6
4pen(ualan-0tambah*temnew *tem4barang%, 5..6
4this-0assert)ount%, 4pen(ualan-0arr*tem.6
4this-0assert>?uals4barang#, 4pen(ualan-0arr*tem/I-0barang.6
4this-0assert>?uals5, 4pen(ualan-0arr*tem/I-0(umlah.6
4this-0assert>?uals4barang%, 4pen(ualan-0arr*tem#I-0barang.6
4this-0assert>?uals5, 4pen(ualan-0arr*tem#I-0(umlah.6
public function testOetotaltanpa'iskon. 3
4barang# ; new BarangMBNO-/#M, #/////.6
4barang% ; new BarangMBNO-/%M, %/////.6
4pen(ualan ; new Pen(ualanM*C-/#M, M%/#Q-/#-/#M.6
4pen(ualan-0tambah*temnew *tem4barang#, #/..6
4pen(ualan-0tambah*temnew *tem4barang%, %/..6
4this-0assert>?uals5//////, 4pen(ualan-0getotal..6
public function testOetotaldengan'iskon. 3
4barang# ; new BarangMBNO-/#M, #/////.6
4barang% ; new BarangMBNO-/%M, %/////.6
4pen(ualan ; new Pen(ualanM*C-/%M, M%/#Q-/#-/#M, new 'iskon#/..6
4pen(ualan-0tambah*temnew *tem4barang#, #/..6
-
7/23/2019 Testing PHPUnit
26/32
4pen(ualan-0tambah*temnew *tem4barang%, %/..6
4this-0assert>?ualsR5/////, 4pen(ualan-0getotal..6
20
S+e- :
+ll true excpectation
Source code :
12php
include 9barang!php96include 9item!php96
include 9diskon!php96
include 9pen(ualan!php96
class Pen(ualanest extends PHPUnit=rameworkest)ase 3
protected function setUp. 3
parent::setUp .6
protected function tear'own. 3
parent::tear'own .6
public function testambah*tem. 3 4barang# ; new BarangMBNO-/#M, #///.6
4barang% ; new BarangMBNO-/%M, %///.6
4pen(ualan ; new Pen(ualanM*C-/#M, M%/#Q-/#-/#M.6
-
7/23/2019 Testing PHPUnit
27/32
4pen(ualan-0tambah*temnew *tem4barang#, 5..6
4pen(ualan-0tambah*temnew *tem4barang%, 5..6
4this-0assert)ount%, 4pen(ualan-0arr*tem.6
4this-0assert>?uals4barang#, 4pen(ualan-0arr*tem/I-0barang.6
4this-0assert>?uals5, 4pen(ualan-0arr*tem/I-0(umlah.6
4this-0assert>?uals4barang%, 4pen(ualan-0arr*tem#I-0barang.6
4this-0assert>?uals5, 4pen(ualan-0arr*tem#I-0(umlah.6
public function testOetotaltanpa'iskon. 3
4barang# ; new BarangMBNO-/#M, #/////.6
4barang% ; new BarangMBNO-/%M, %/////.6
4pen(ualan ; new Pen(ualanM*C-/#M, M%/#Q-/#-/#M.6
4pen(ualan-0tambah*temnew *tem4barang#, #/..6
4pen(ualan-0tambah*temnew *tem4barang%, %/..6
4this-0assert>?uals5//////, 4pen(ualan-0getotal..6
public function testOetotaldengan'iskon. 3
4barang# ; new BarangMBNO-/#M, #/////.6
4barang% ; new BarangMBNO-/%M, %/////.6
4pen(ualan ; new Pen(ualanM*C-/%M, M%/#Q-/#-/#M, new 'iskon#/..6
4pen(ualan-0tambah*temnew *tem4barang#, #/..6
4pen(ualan-0tambah*temnew *tem4barang%, %/..6
4this-0assert>?ualsR5/////, 4pen(ualan-0getotal..6
-
7/23/2019 Testing PHPUnit
28/32
20
2 Pe%,/*&% Pe%*/l%
Selan(utn&a adalah mengu(i class &ang sudah kita buat tadi dengan
menggunakan PHPUnit , buka command line , lalu ketikan perintah
54h4/%&' 4e%*/l%4h4
Untuk hasil detail ketikan :
54h4/%&' 6 'e'7 4e%*/l%'e4h4
'an berikut hasil pengu(ian dari masing masing skema &ang sudah dibuat :
S+e- 1:
% inputan barang barang# ; #///// , ?t& ; #/. , barang% ; %///// , ?t& ; %/.
otal harga tanpa diskon , matches : 5////// , di coba expect : L/////
Hasil testing :
-
7/23/2019 Testing PHPUnit
29/32
S+e- 2:
% inputan barang barang# ; #///// , ?t& ; #/. , barang% ; %///// , ?t& ; %/.
otal harga dengan diskon #/G , matches : R5///// , di coba expect : 5//////
Hasil testing :
-
7/23/2019 Testing PHPUnit
30/32
S+e- 8:
% inputan barang barang# ; #///// , ?t& ; #/. , barang% ; %///// , ?t& ; %/.
'i inputkan tanpa harga barang, expect : arg missingHasil testing :
S+e- :
+ll true excpectation
Hasil testing :
-
7/23/2019 Testing PHPUnit
31/32
8 Ke&-4/l%
#. Sebelum melakukan test menggunakan PHPUnit, pastikan dahulu untuk class
&ang akan diu(i terdapat extends PHPUnit=rameworkest)aseT
%. Untuk assertionsT ada beberapa tipe sesuai dengan apa &ang digunakan,
semisal untuk nilai &ang sama maka menggunakan assert>?uals, untuk cek han&a tipe
data tertentu menggunakan assert)ontainsnl&, untuk cek (umlah data menggunakan
assert)ount, dan masih ban&ak (enis assertionsT lainn&a!
$. 'ata &ang tidak mempun&ai assertionsT tetap dapat dilakukan proses testing,
tetapi akan muncuk peringatan tidak ada test &ang dapat dilakukan!
R. PHPUnit menghitung waktu untuk loadT data &ang di test dan (uga memor&
&ang digunakan saat s&ntax tersebut ber(alan! Fika muncul kesalahan, maka muncul
-
7/23/2019 Testing PHPUnit
32/32
(uga apa &ang membuat file tersebut melakukan kesalahan! Fika benar, maka tidak
muncul satupun peringatan atau pesan kesalahan!
5. esting menggunakan PHPUnit memungkinkan agar sebuah
software sudah melewati fase testing di awal, maka problem-problem &ang mungkin
ter(adi pasca produksi bisa di ketahui se(ak awal, dan ketika ter(adi perubahan maka
dapat di deteksi efffect dari perubahan tersebut sehingga tidak menimbulkan riffle
effect, keretakan software fragile., hard code &ang membuat proses de"elopment,
maintenance software men(adi rumit dan memakan waktu , karena satu persatu setiap
fungsi , class dapat dites menggunakan method &ang berbeda beda untuk setiap #
fungsi class!