Pendahuluan
Test-Driven Development (TDD) adalah metodologi pengembangan perangkat lunak yang menekankan penulisan test case sebelum menulis kode produksi. Dengan TDD, developer dapat memastikan bahwa setiap fitur yang dikembangkan telah memenuhi persyaratan fungsional sejak awal.
PHP 8, dengan fitur-fitur terbaru seperti JIT Compiler, Union Types, dan Named Arguments, menjadi lebih powerful untuk diintegrasikan dengan TDD. Artikel ini akan membahas konsep TDD, manfaatnya, dan implementasinya menggunakan PHPUnit (framework testing PHP).
Apa Itu Test-Driven Development (TDD)?
TDD mengikuti siklus Red-Green-Refactor:
-
Red: Menulis test yang gagal karena kode belum ada.
-
Green: Menulis kode minimal agar test berhasil.
-
Refactor: Memperbaiki struktur kode tanpa mengubah fungsionalitas.
Manfaat TDD
-
Meminimalkan bug sejak awal.
-
Dokumentasi hidup melalui test case.
-
Kode lebih modular dan mudah di-maintain.
-
Meningkatkan kepercayaan diri saat refactoring.
Mempersiapkan Lingkungan Pengembangan
Sebelum memulai, pastikan Anda telah menginstal:
-
PHP 8.x
-
Composer
-
PHPUnit
Langkah 1: Instal PHPUnit via Composer
Jalankan perintah berikut di terminal:
composer require --dev phpunit/phpunit
Ini akan menginstal PHPUnit sebagai dev dependency.
Langkah 2: Konfigurasi PHPUnit
Buat file phpunit.xml di root project:
<?xml version="1.0" encoding="UTF-8"?> <phpunit bootstrap="vendor/autoload.php"> <testsuites> <testsuite name="Unit Tests"> <directory>tests</directory> </testsuite> </testsuites> </phpunit>
Implementasi TDD dengan PHP 8
Kita akan membuat sebuah Calculator sederhana dengan metode add().
Langkah 1: Red (Menulis Test yang Gagal)
Buat folder tests dan file CalculatorTest.php:
<?php
use PHPUnit\Framework\TestCase;
class CalculatorTest extends TestCase {
public function testAddTwoNumbers() {
$calculator = new Calculator();
$result = $calculator->add(2, 3);
$this->assertEquals(5, $result);
}
}
Jalankan test dengan:
./vendor/bin/phpunit
Test akan gagal karena class Calculator belum ada.
Langkah 2: Green (Menulis Kode Minimal agar Test Lolos)
Buat file src/Calculator.php:
<?php
class Calculator {
public function add(int $a, int $b): int {
return $a + $b;
}
}
Jalankan lagi PHPUnit, sekarang test harus berhasil (green).
Langkah 3: Refactor (Memperbaiki Kode Tanpa Mengubah Perilaku)
Misal, kita ingin menambahkan validasi:
public function add(int $a, int $b): int { if (!is_numeric($a) || !is_numeric($b)) { throw new InvalidArgumentException("Input must be numeric"); } return $a + $b; }
Tambahkan test case baru untuk memvalidasi error:
public function testAddNonNumericThrowsException() { $this->expectException(InvalidArgumentException::class); $calculator = new Calculator(); $calculator->add("a", "b"); }
Best Practices TDD di PHP
-
Test Naming: Gunakan nama deskriptif (
testAddTwoNumbers,testSubtractNegativeNumbers). -
Small Tests: Setiap test harus fokus pada satu fungsionalitas.
-
Mocking: Gunakan PHPUnit Mock Objects untuk dependensi eksternal.
-
Continuous Testing: Integrasikan dengan GitHub Actions atau CI/CD lainnya.
Kesimpulan
TDD membantu developer menulis kode yang lebih terstruktur, teruji, dan mudah dikembangkan. Dengan PHP 8 dan PHPUnit, implementasi TDD menjadi lebih efisien.
Mulailah dengan test sederhana, lalu kembangkan secara bertahap. Semakin sering Anda berlatih, semakin baik penguasaan TDD Anda.
Selamat mencoba! 🚀