Apa itu PHPUnit?
PHPUnit adalah framework testing standar untuk PHP. Di Laravel, PHPUnit sudah terinstal secara default dan siap digunakan.
Struktur Test Class
<?php
namespace Tests\Unit;
use PHPUnit\Framework\TestCase;
class KalkulatorTest extends TestCase
{
public function test_penjumlahan(): void
{
$hasil = 2 + 3;
$this->assertEquals(5, $hasil);
}
public function test_perkalian(): void
{
$hasil = 4 * 5;
$this->assertEquals(20, $hasil);
}
}
Assertions Dasar
// Equality
$this->assertEquals("Budi", $user->nama);
$this->assertSame(5, $hasil); // strict type comparison
// Boolean
$this->assertTrue($user->isActive());
$this->assertFalse($user->isBanned());
// Null
$this->assertNull($result);
$this->assertNotNull($user);
// Array
$this->assertCount(3, $items);
$this->assertContains("apel", $buah);
$this->assertArrayHasKey("nama", $data);
// String
$this->assertStringContainsString("Halo", $pesan);
$this->assertMatchesRegularExpression("/\d{4}/", $tahun);
// Type
$this->assertInstanceOf(User::class, $user);
Data Providers
Untuk menjalankan test yang sama dengan berbagai input:
use PHPUnit\Framework\Attributes\DataProvider;
class MathTest extends TestCase
{
public static function dataProvider(): array
{
return [
"dua plus tiga" => [2, 3, 5],
"nol plus nol" => [0, 0, 0],
"negatif" => [-1, -2, -3],
];
}
#[DataProvider("dataProvider")]
public function test_penjumlahan(int $a, int $b, int $expected): void
{
$this->assertEquals($expected, $a + $b);
}
}
setUp() dan tearDown()
class UserServiceTest extends TestCase
{
private UserService $service;
protected function setUp(): void
{
parent::setUp();
$this->service = new UserService();
}
protected function tearDown(): void
{
// bersihkan resource jika perlu
parent::tearDown();
}
public function test_create_user(): void
{
$user = $this->service->create("Budi");
$this->assertEquals("Budi", $user->nama);
}
}
Menjalankan Test di Laravel
# Jalankan semua test
php artisan test
# Jalankan file tertentu
php artisan test tests/Unit/KalkulatorTest.php
# Filter test by name
php artisan test --filter=test_penjumlahan
# Dengan output detail
php artisan test --compact