Chapter sebelumnya sudah menjelaskan mengapa test otomatis layak menjadi bagian rutin dari alur kerja pengembangan. Sekarang kita menyiapkan perkakasnya: PHPUnit, kerangka pengujian (testing framework) de-facto untuk PHP yang dipakai hampir di seluruh proyek modern. Pada chapter ini kita akan menginstal PHPUnit melalui dua jalur resmi — berkas PHAR mandiri dan paket Composer — lalu membedah berkas konfigurasi phpunit.xml dan memverifikasi bahwa instalasi benar-benar siap dipakai.
Memeriksa Prasyarat Instalasi #
PHPUnit berjalan di lingkungan CLI, jadi langkah pertama adalah memastikan PHP terpasang dan dapat dipanggil dari terminal. PHPUnit 12 membutuhkan versi PHP yang masih aktif didukung; jika perintah berikut menampilkan PHP 8.3 atau lebih baru, Anda sudah aman. Berikut cara memeriksanya:
php -vOutput yang Dihasilkan:
PHP 8.4.23 (cli) (built: Jul 7 2026 05:22:53) (NTS gcc 14.2.0)
Copyright (c) The PHP Group
Built by static-php-cli 2.8.6
Zend Engine v4.4.23, Copyright (c) Zend TechnologiesPHPUnit juga bergantung pada beberapa ekstensi standar seperti dom, filter, json, libxml, mbstring, dan xmlwriter. Ekstensi-ekstensi tersebut sudah terpasang secara bawaan pada hampir semua build PHP normal, termasuk lingkungan yang dipakai course ini, sehingga biasanya tidak perlu langkah tambahan. Jika Anda ingin memastikannya, perintah php -m menampilkan daftar ekstensi yang aktif.
Jalur Instalasi Pertama: Berkas PHAR #
Cara instalasi paling ringkas adalah mengunduh berkas PHAR (PHP Archive) — satu berkas tunggal yang berisi seluruh kode PHPUnit dan bisa dijalankan langsung oleh interpreter PHP, mirip seperti berkas .jar pada dunia Java. Jalur ini tidak membutuhkan Composer sama sekali, sehingga cocok untuk mencoba PHPUnit, berbagi skrip uji, atau menjalankan pengujian di server CI yang sederhana. Semua berkas PHAR resmi PHPUnit didistribusikan dari domain phar.phpunit.de.
curl -sL -o phpunit-12.phar https://phar.phpunit.de/phpunit-12.phar
chmod +x phpunit-12.phar
php phpunit-12.phar --versionOutput yang Dihasilkan:
PHPUnit 12.5.39 by Sebastian Bergmann and contributors.Mari kita bedah tiap baris perintah di atas:
curl -sL -o phpunit-12.phar ...: mengunduh berkas PHAR dari server resmi PHPUnit. Opsi-smembuat curl bekerja tanpa progres bar,-Lmemerintahkan curl mengikuti pengalihan (redirect) alamat, dan-omenentukan nama berkas hasil unduhan (ukurannya sekitar 6 MB).chmod +x phpunit-12.phar: menandai berkas sebagai dapat dieksekusi. Setelah langkah ini Anda bisa menjalankannya langsung sebagai./phpunit-12.phar --versionkarena berkas PHAR memiliki shebang yang mencariphpdiPATH.php phpunit-12.phar --version: meminta PHPUnit melaporkan versinya. BarisPHPUnit 12.5.39di atas adalah bukti bahwa berkas terunduh utuh dan siap dipakai.
Perhatikan bahwa kita sengaja mengunduh phpunit-12.phar, bukan phpunit.phar. Alamat tanpa nomor versi selalu mengarah ke rilis stabil terbaru, sedangkan alamat bernomor mengunci kita pada satu jalur versi mayor. Tabel berikut merangkumannya:
| Alamat unduhan | Isi yang diperoleh |
|---|---|
https://phar.phpunit.de/phpunit.phar | Rilis stabil terbaru — saat chapter ini ditulis, pengalihan menuju PHPUnit 13.4.2 |
https://phar.phpunit.de/phpunit-12.phar | Rilis terbaru jalur 12.x — 12.5.39, versi yang dipakai course ini |
https://phar.phpunit.de/phpunit-11.phar | Rilis terbaru jalur 11.x untuk PHP yang lebih lama |
Jalur Instalasi Kedua: Composer #
Untuk proyek nyata, jalur yang lebih lazim adalah memasang PHPUnit sebagai dependensi Composer. Dengan cara ini, versi PHPUnit tercatat di composer.json, pembaruannya terkendali lewat composer.lock, dan seluruh tim mendapatkan versi yang persis sama saat menjalankan composer install. Jika Anda belum familier dengan Composer, baca dulu chapter Apa itu Composer
.
Berikut sesi nyata memasang PHPUnit pada proyek kecil baru bernama tokobuku:
mkdir tokobuku && cd tokobuku
composer require "phpunit/phpunit:^12.5" --dev
vendor/bin/phpunit --versionOutput yang Dihasilkan:
./composer.json has been created
Running composer update phpunit/phpunit
Loading composer repositories with package information
Updating dependencies
Lock file operations: 25 installs, 0 updates, 0 removals
...
- Installing phpunit/phpunit (12.5.39): Extracting archive
...
Generating autoload files
...
PHPUnit 12.5.39 by Sebastian Bergmann and contributors.Beberapa hal penting terjadi di sesi tersebut. Pertama, Composer membuat composer.json baru karena folder proyek masih kosong, lalu menyelesaikan dependensi dan memasang 25 paket — PHPUnit datang bersama komponen pendukung seperti phpunit/php-code-coverage dan sebastian/diff. Baris terakhir membuktikan bahwa berkas vendor/bin/phpunit yang dibuat Composer benar-benar berfungsi. Hasil akhirnya, composer.json proyek kini berisi:
{
"require-dev": {
"phpunit/phpunit": "^12.5"
}
}Bendera --dev menempatkan paket pada bagian require-dev, artinya PHPUnit hanya terpasang saat pengembangan dan tidak ikut ketika aplikasi dideploy ke production dengan composer install --no-dev. Constraint ^12.5 berarti “versi 12.5 atau lebih tinggi, tetapi tetap di bawah 13.0” — pola ini yang menjaga kita tetap di jalur 12.x. Detail aturan penulisan versi seperti ini sudah dibahas pada chapter Version Constraints
.
Anatomi Berkas Konfigurasi phpunit.xml #
Setelah instalasi, langkah berikutnya adalah berkas konfigurasi phpunit.xml di akar proyek. Berkas ini bersifat opsional, tetapi sangat disarankan karena menyimpan pengaturan baku: di mana test dicari, autoloader mana yang dimuat, dan bagaimana output diwarnai. Berikut bentuk tipikal untuk proyek yang memakai Composer:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/12.5/phpunit.xsd"
bootstrap="vendor/autoload.php"
colors="true">
<testsuites>
<testsuite name="Unit">
<directory>tests</directory>
</testsuite>
</testsuites>
</phpunit>Mari kita bedah elemen-elemennya satu per satu:
- Atribut
bootstrap="vendor/autoload.php": berkas yang dimuat sekali sebelum test berjalan — di proyek Composer, autoload inilah yang membuat kelassrc/bisa di-use langsung di dalam test tanparequire_oncemanual. - Elemen
<testsuites>: wadah untuk satu atau lebih testsuite, yaitu kelompok test yang bisa dijalankan terpisah. - Elemen
<testsuite name="Unit">: mendefinisikan satu suite bernamaUnit; Anda bisa menambahkan suite lain sepertiIntegrationdengan folder berbeda. - Elemen
<directory>tests</directory>: memberi tahu PHPUnit bahwa seluruh berkas*Test.phpdi dalam foldertests(beserta subfoldernya) adalah test yang harus dijalankan. - Atribut
colors="true": mengaktifkan warna hijau/merah pada output terminal agar hasil lebih mudah dipindai. - Atribut
xsi:noNamespaceSchemaLocation: menunjuk skema XML resmi sehingga editor dapat melengkapi dan memvalidasi penulisan konfigurasi.
PHPUnit otomatis membaca phpunit.xml dari direktori kerja saat dijalankan tanpa argumen, jadi Anda cukup mengetik vendor/bin/phpunit saja. Jika ingin dibuatkan kerangka konfigurasi secara interaktif, perintah --generate-configuration akan menanyai Anda beberapa pertanyaan lalu menuliskan berkasnya.
Memilih Antara PHAR dan Composer #
| Kriteria | Berkas PHAR | Paket Composer |
|---|---|---|
| Cara instalasi | Unduh satu berkas | composer require phpunit/phpunit --dev |
| Cara pembaruan | Unduh ulang berkas | composer update phpunit/phpunit |
| Jejak pada proyek | Tidak ada catatan di proyek | Tercatat di composer.json dan composer.lock |
| Integrasi autoload | Tidak terikat | Memakai vendor/autoload.php proyek |
| Cocok untuk | Eksperimen, skrip uji cepat, CI minimalis | Proyek aplikasi dan library jangka panjang |
Aturan praktisnya sederhana: jika proyek Anda sudah memakai Composer — yang hampir pasti terjadi pada aplikasi modern — pasang PHPUnit lewat Composer agar versinya terkunci bersama dependensi lain. Berkas PHAR unggul saat Anda butuh PHPUnit tanpa menyentuh struktur proyek, misalnya untuk mencoba framework ini di folder kosong. Lingkungan latihan course ini sendiri menyediakan PHPUnit 12.5.39 sebagai berkas PHAR, persis seperti hasil unduhan phpunit-12.phar di atas.
Verifikasi Instalasi dengan Test Pertama #
Instalasi baru layak disebut berhasil jika PHPUnit benar-benar menjalankan sebuah test. Buat folder tests lalu isi dengan berkas InstalasiTest.php berikut:
<?php
use PHPUnit\Framework\TestCase;
final class InstalasiTest extends TestCase
{
public function testPHPUnitBerjalanSesuaiHarapan(): void
{
$hasil = 1 + 1;
$this->assertSame(2, $hasil);
}
}Struktur di atas adalah bentuk minimal sebuah test PHPUnit: kelas bernama InstalasiTest (berakhir dengan sufiks Test) yang mewarisi PHPUnit\Framework\TestCase, berisi method publik berawalan test yang melakukan satu assertion assertSame(2, $hasil). Eksekusi assertion itulah yang membandingkan nilai harapan dengan nilai nyata — konsep ini akan kita dalami pada dua chapter berikutnya. Sekarang jalankan PHPUnit pada folder tests:
php phpunit-12.phar testsOutput yang Dihasilkan:
PHPUnit 12.5.39 by Sebastian Bergmann and contributors.
Runtime: PHP 8.4.23
. 1 / 1 (100%)
Time: 00:00.001, Memory: 28.05 MB
OK (1 test, 1 assertion)Baris OK (1 test, 1 assertion) adalah sinyal sukses: satu method test dijalankan dan satu assertion lolos. Perhatikan juga bahwa PHPUnit mengakhiri prosesnya dengan exit code 0 — inilah yang nantinya dipakai tools CI untuk menentukan langkah lanjutan. Titik pada baris progres mewakili satu test yang lulus; jika ada kegagalan, titik itu diganti huruf F beserta laporan rinci.
Ringkasan #
PHPUnit bisa hadir dalam proyek Anda melalui berkas PHAR tunggal dari phar.phpunit.de atau sebagai paket Composer dengan constraint seperti ^12.5; keduanya menghasilkan binary yang dilaporkan lewat --version. Berkas phpunit.xml melengkapi instalasi dengan konfigurasi testsuite dan bootstrap yang terdokumentasi di dalam proyek. Dengan test pertama yang sudah berjalan hijau, kita siap menyusun kelas test yang sesungguhnya — mulai dari konvensi penamaan, siklus hidup setUp/tearDown, hingga cara menjalankan test tunggal — pada chapter Menulis PHPUnit Tests
.
Referensi #
- Halaman unduhan resmi PHPUnit (PHAR) — semua berkas PHAR PHPUnit didistribusikan di sini
- Dokumentasi Composer
— panduan resmi
composer requiredanrequire-dev - Versi PHP yang didukung — acuan memilih versi PHPUnit yang cocok