PHPUnit Dasar — Testing

Apa itu PHPUnit? PHPUnit adalah framework testing standar untuk PHP. Di Laravel, PHPUnit sudah terinstal secara default dan siap digunakan. Struktur Test Class

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

Yang akan kamu pelajari