Cara menggunakan assertequals in php

Pengantar

Unit Testing sebenarnya adalah kumpulan tes yang berbeda terhadap kode kamu. Bukan pekerjaan yang sulit untuk menulis unit test. Untuk mempraktekkan unit testing kita membutuhkan tools untuk mengetest. Di dunia PHP ada salah satu tools yang populer, adalah PHPUnit. Di materi ini kita akan mempraktekkanya. Yang harus Kamu lakukan hanyalah mengikuti serangkaian konvensi. Kita akan mencoba membuat sebuah class sederhana untuk testing, lalu kita integrasikan dengan PHPUnit.

Untuk belajar materi ini kamu diharapkan sudah paham :

  1. PHP
  2. OOP
  3. CLI Command pada Windows / Linux
  4. Composer

Bagi yang merasa sudah paham 4 point diatas kita coba lanjutkan. Buatlah sebuah folder dengan nama latihan-php-unit. Jika sudah, silahkan masuk ke direktori latihan tersebut dengan CLI masing-masing dengan perintah cd. Bagi yang menggunakan GUI/Window, silahkan masuk ke folder tersebut dengan mengkliknya.

Instalasi PHP Unit

Pertama-tama kita membutuhkan framework PHPUnit. Halaman website PHPUnit dapat ditemukan pada alamat https://phpunit.de/. Saat ini PHPUnit sudah mencapat versi 9. Nah, untuk latihan kali ini kita akan gunakan versi 8 yang terdaftar secara default pada repository Composer. Silahkan buka folder latihan-php-unit, lalu jalankan perintah ini pada CLI :

composer require phpunit/phpunit

Tampilannya akan terlihat seperti ini :

Cara menggunakan assertequals in php

Jika kamu buka folder latihan-php-unit sekarang akan terisi file composer.json, composer.lock beserta folder vendor. Sampai sini kita sudah berhasil meinstall PHP Unit.

Cara menggunakan assertequals in php

Bisa dilihat pada gambar diatas, saya buka foldernya dengan menggunakan VSCode.

Membuat Class Contoh

Pada dunia nyata dalam proyek seringkali kita membuat class. Baik pekerjaan native ataupun menggunakan framework. Misalnya membuat controller, model, ataupun library. Dalam kasus sekarang kita ceritanya mempunyai sebuah library yang ingin kita test. Library ini kita beri nama Wordcount.php. Yang berisi sebuah method untuk menghitung jumlah kata dalam kalimat.

Silahkan buat sebuah file bernama Wordcount.php berisi kode berikut :

<?php
// File : WordCount.php
class Wordcount
{
    public function countWords($sentence)
    {
        return count(explode(" ",$sentence));
    }
}
?>

Terlihat sederhana? kita hanya membuat sebuah method bernama countWords yang memecah string menjadi array, lalu menghitung jumlah array tersebut, kemudian mengembalikan nilai jumlahnya.

Membuat Test

Tidak berlama-lama, langsung saja kita buat kode untuk testingnya. Untuk membuat test kita membutuhkan komponen class dari PHPUnit. Komponen tersebut sudah terinstall dalam folder vendor saat menjalankan Composer.

Sekarang buatlah file bernama SimpleTest.php pada folder latihan-php-unit berisi kode berikut ini :

<?php

// Path to run ./vendor/bin/phpunit --bootstrap vendor/autoload.php FileName.php
// Butuh Framework PHPUnit
use PHPUnit\Framework\TestCase;

// Class yang mau di TEST.
require_once "Wordcount.php";

// Class untuk run Testing.
class SimpleTest extends TestCase
{
    public function testCountWords()
    {
        // Kita pakai class yang mau kita test.
        $Wc = new WordCount();

        // Kita masukan parameter 4 kata, yang harusnya dapat output 4.
        $TestSentence = "My name is Joko"; // 4 Kata ..
        $WordCount = $Wc->countWords($TestSentence);

        // Kita assert equal, ekspektasi nya harus 4, jika benar berarti Wordcount berfungsi dengan baik.
        $this->assertEquals(4, $WordCount); 
    }
}

Pada kode tersebut kita use komponen PHPUnit yang sudah ada dalam folder vendor. Lalu kita juga require class yang sudah kita bikin sebelumnya yaitu Wordcount.php.

Dalam kode kita juga membuat class bernama SimpleTest yang meng-extend TestCase milik PHPUnit. Dalam penggunaannya, kita minimal harus membuat sebuah method dalam TestCase, disini kita berinama testCountWords.

Sebenernya penamaannya bebas terserah teman-teman, nama pada contoh diatas adalah nama yang paling relevan dengan kasus kita. Pada method testCountWords kita membuat instance dari class yang ingin kita test, lalu menjalankan assertEquals.

Jalankan Test

Silahkan buka folder proyek latihan-php-unit lalu jalankan perintah ini :

./vendor/bin/phpunit --bootstrap vendor/autoload.php SimpleTest.php

Disini kita memanggil binary program phpunit dan memerintah untuk mengetest file SimpleTest.php yang sudah kita buat sebelumnya. Silahkan pencet enter/run maka hasilnya akan seperti ini :

Cara menggunakan assertequals in php

Perintah assertEqual akan membandingkan parameter pertama (output yang diinginkan) dan paramater kedua (method yang di run), jika match, berarti test berhasil. Terbayang?

Kita hanya membandingkan hasil yang diinginkan dengan hasil real output class yang ingin di test. Jika sesuai ekspektasi maka si class tersebut berjalan dengan baik. Jika ternyata pas di test hasil tidak sama, berarti class kita ada bug / error. String "My name is Joko" harus selalu mengeluarkan hasil 4.

Sampai disini kita sudah berhasil belajar Unit Testing sederhana.