Struktur Direktori Vendor PHPUnit
Saat Anda menginstal PHPUnit melalui Composer, paket tersebut ditempatkan di dalam direktori vendor/phpunit/phpunit. Struktur ini mengikuti standar PSR-4 untuk autoloading kelas. Memahami hierarki ini krusial untuk debugging, konfigurasi runner, dan integrasi CI/CD.
Hierarki Direktori Utama
Berikut adalah pemetaan direktori standar pada instalasi PHPUnit versi 9.x hingga 11.x:
| Direktori/File | Deskripsi Fungsi |
|---|---|
src/ | Berisi kode sumber utama (source code) PHPUnit. |
tests/ | Berisi unit test untuk PHPUnit itu sendiri. |
vendor/ | Dependensi pihak ketiga yang dibutuhkan PHPUnit (seperti SebastianBergmann). |
phpunit | File eksekusi (binary) untuk menjalankan test via CLI. |
Analisis Komponen Inti
Di dalam direktori src/, terdapat modul-modul krusial yang membentuk ekosistem pengujian:
- Framework/: Berisi kelas dasar
TestCaseyang Anda extend saat membuat test case. - Runner/: Mengatur siklus hidup eksekusi test, termasuk inisialisasi dan pembersihan.
- Util/: Berisi utilitas pembantu seperti
Printer,Configuration, danFilter. - TextUI/: Menangani antarmuka baris perintah (CLI) saat Anda menjalankan perintah
./vendor/bin/phpunit.
Lokasi Binary dan Autoloading
Penting untuk dicatat bahwa file eksekusi utama PHPUnit sebenarnya berada di vendor/bin/phpunit. File ini merupakan symlink yang mengarah ke vendor/phpunit/phpunit/phpunit. Composer secara otomatis menghasilkan file vendor/autoload.php yang memetakan namespace PHPUnit\ ke direktori src/ tersebut.
Tips Troubleshooting Struktur
Jika Anda mengalami error 'Class not found' saat menjalankan test, pastikan hal berikut:
- Verifikasi keberadaan
vendor/autoload.php. - Pastikan file
composer.jsonAnda memiliki konfigurasiautoload-devyang benar untuk memuat direktori test Anda sendiri. - Jalankan
composer dump-autoloaduntuk memperbarui peta kelas jika Anda baru saja mengubah struktur namespace.
Selalu gunakan ./vendor/bin/phpunit alih-alih menginstal PHPUnit secara global untuk memastikan versi yang digunakan konsisten dengan dependensi proyek Anda.