Pustaka Komposer dengan atribut tambahan untuk meningkatkan pengujian dengan PHPUnit.
komposer membutuhkan --dev eliashaeussler/phpunit-attributes
Perpustakaan dikirimkan dengan ekstensi PHPUnit yang siap digunakan. Itu harus terdaftar di file konfigurasi PHPUnit Anda:
<?xml versi="1.0" pengkodean="UTF-8"?> <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd" bootstrap="vendor/autoload.php" >+ <ekstensi>+ <bootstrap class="EliasHaeusslerPHPUnitAttributesPHPUnitAttributesExtension" />+ </extensions> <testsuites> <nama testsuite = "unit"> <direktori>tes</direktori> </testsuite> </testsuite> <sumber> <sertakan> <direktori>src</direktori> </termasuk> </sumber> </phpunit>
Beberapa atribut dapat dikonfigurasi dengan parameter ekstensi khusus. Ini harus ditambahkan ke bagian pendaftaran ekstensi seperti berikut:
<ekstensi>- <bootstrap class="EliasHaeusslerPHPUnitAttributesPHPUnitAttributesExtension" />+ <bootstrap class="EliasHaeusslerPHPUnitAttributesPHPUnitAttributesExtension">+ <parameter name="fancyParameterName" value="fancyParameterValue" />+ </bootstrap> </extensions>
Atribut berikut dikirimkan bersama perpustakaan ini:
#[RequiresClass]
#[RequiresPackage]
#[RequiresClass]
Cakupan: Tingkat Kelas & Metode
Dengan atribut ini, pengujian atau kasus pengujian dapat ditandai hanya akan dieksekusi jika ada kelas tertentu. Kelas yang diberikan harus dapat dimuat oleh pemuat kelas saat ini (yang biasanya merupakan pemuat kelas default Komposer).
Secara default, kasus pengujian yang memerlukan kelas yang tidak ada akan dilewati. Namun, perilaku ini dapat dikonfigurasi dengan menggunakan parameter ekstensi handleMissingClasses
. Jika disetel ke fail
, kasus pengujian dengan kelas yang hilang akan gagal (defaultnya adalah skip
):
<ekstensi> <bootstrap class="EliasHaeusslerPHPUnitAttributesPHPUnitAttributesExtension"> <nama parameter="handleMissingClasses" value="gagal" /> </bootstrap> </ekstensi>
kelas terakhir DummyTest memperluas TestCase { #[RequiresClass(AnImportantClass::class)]fungsi publik testDummyAction(): void{// ...} }
Tingkat kelas:
#[RequiresClass(AnImportantClass::class)]kelas akhir DummyTest memperluas TestCase {public function testDummyAction(): void{// Dilewati jika AnImportantClass tidak ada.}public function testOtherDummyAction(): void{// Dilewati jika AnImportantClass tidak ada.} }
Tingkat metode:
kelas terakhir DummyTest memperluas TestCase { #[RequiresClass(AnImportantClass::class)]fungsi publik testDummyAction(): void{// Dilewati jika AnImportantClass tidak ada.}fungsi publik testOtherDummyAction(): void{// Tidak dilewati.} }
Tingkat kelas:
#[RequiresClass(AnImportantClass::class, 'Tes ini memerlukan kelas `AnImportantClass`.')]kelas akhir DummyTest memperluas TestCase {public function testDummyAction(): void{// Dilewati jika AnImportantClass tidak ada, bersama dengan pesan khusus.}public function testOtherDummyAction(): void{// Dilewati jika AnImportantClass tidak ada, bersama dengan pesan khusus.} }
Tingkat metode:
kelas terakhir DummyTest memperluas TestCase { #[RequiresClass(AnImportantClass::class, 'Tes ini memerlukan kelas `AnImportantClass`.')]fungsi publik testDummyAction(): void{// Dilewati jika AnImportantClass tidak ada, bersama dengan pesan khusus.}fungsi publik testOtherDummyAction(): void{// Tidak dilewati.} }
Tingkat kelas:
#[RequiresClass(AnImportantClass::class, outcomeBehavior: OutcomeBehavior::Fail)]kelas akhir DummyTest memperluas TestCase {fungsi publik testDummyAction(): void{// Gagal jika AnImportantClass tidak ada.}fungsi publik testOtherDummyAction(): void{// Gagal jika AnImportantClass tidak ada.} }
Tingkat metode:
kelas terakhir DummyTest memperluas TestCase { #[RequiresClass(AnImportantClass::class, outcomeBehavior: OutcomeBehavior::Fail)]fungsi publik testDummyAction(): void{// Gagal jika AnImportantClass tidak ada.}fungsi publik testOtherDummyAction(): void{// Tidak gagal.} }
Tingkat kelas:
#[MembutuhkanKelas(KelasPenting::kelas)] #[RequiresClass(AnotherVeryImportantClass::class)]kelas akhir DummyTest memperluas TestCase {public function testDummyAction(): void{// Dilewati jika AnImportantClass dan/atau AnotherVeryImportantClass tidak ada.}public function testOtherDummyAction(): void{// Dilewati jika AnImportantClass dan/atau AnotherVeryImportantClass tidak ada.} }
Tingkat metode:
kelas terakhir DummyTest memperluas TestCase { #[MembutuhkanKelas(KelasPenting::kelas)] #[RequiresClass(AnotherVeryImportantClass::class)]fungsi publik testDummyAction(): void{// Dilewati jika AnImportantClass dan/atau AnotherVeryImportantClass tidak ada.}fungsi publik testOtherDummyAction(): void{// Tidak dilewati.} }
#[RequiresPackage]
Cakupan: Tingkat Kelas & Metode
Atribut ini dapat digunakan untuk menentukan persyaratan paket spesifik untuk pengujian tunggal serta kelas pengujian lengkap. Paket yang diperlukan diharapkan dapat diinstal melalui Komposer. Secara opsional, Anda dapat menentukan batasan versi dan pesan khusus.
Penting
Atribut ini menentukan paket Composer yang terinstal dari kelas InstalledVersions
yang dihasilkan waktu build yang dibuat oleh Composer. Untuk membaca kelas ini dengan benar, penting untuk menyertakan autoloader yang dihasilkan Komposer dalam skrip bootstrap PHPUnit Anda:
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd" bootstrap="vendor/autoload.php"><! -- ... --></phpunit>
Anda juga dapat meneruskan skrip sebagai opsi perintah: phpunit --bootstrap vendor/autoload.php
Secara default, kasus pengujian dengan persyaratan yang tidak terpenuhi akan dilewati. Namun, perilaku ini dapat dikonfigurasi dengan menggunakan parameter ekstensi handleUnsatisfiedPackageRequirements
. Jika disetel ke fail
, kasus pengujian dengan persyaratan yang tidak terpenuhi akan gagal (defaultnya adalah skip
):
<ekstensi> <bootstrap class="EliasHaeusslerPHPUnitAttributesPHPUnitAttributesExtension"> <nama parameter="handleUnsatisfiedPackageRequirements" value="gagal" /> </bootstrap> </ekstensi>
kelas terakhir DummyTest memperluas TestCase { #[RequiresPackage('symfony/console')]fungsi publik testDummyAction(): void{// ...} }
Tingkat kelas:
#[RequiresPackage('symfony/console')]kelas akhir DummyTest memperluas TestCase {public function testDummyAction(): void{// Dilewati jika symfony/console tidak diinstal.}public function testOtherDummyAction(): void{// Dilewati jika symfony/console tidak diinstal.} }
Tingkat metode:
kelas terakhir DummyTest memperluas TestCase { #[RequiresPackage('symfony/console')]fungsi publik testDummyAction(): void{// Dilewati jika symfony/console tidak diinstal.}fungsi publik testOtherDummyAction(): void{// Tidak dilewati.} }
Tingkat kelas:
#[RequiresPackage('symfony/*')]kelas akhir DummyTest memperluas TestCase {public function testDummyAction(): void{// Dilewati jika tidak ada paket symfony/* yang diinstal.}public function testOtherDummyAction(): void{// Dilewati jika tidak ada paket symfony/* yang diinstal.} }
Tingkat metode:
kelas terakhir DummyTest memperluas TestCase { #[RequiresPackage('symfony/*')]fungsi publik testDummyAction(): void{// Dilewati jika tidak ada paket symfony/* yang diinstal.}fungsi publik testOtherDummyAction(): void{// Tidak dilewati.} }
Tingkat kelas:
#[RequiresPackage('symfony/console', '>= 7')]kelas akhir DummyTest memperluas TestCase {public function testDummyAction(): void{// Dilewati jika versi symfony/console yang diinstal adalah < 7.}public function testOtherDummyAction(): void{// Dilewati jika versi symfony/console yang diinstal adalah < 7.} }
Tingkat metode:
kelas terakhir DummyTest memperluas TestCase { #[RequiresPackage('symfony/console', '>= 7')]fungsi publik testDummyAction(): void{// Dilewati jika versi symfony/konsol yang diinstal adalah < 7.}fungsi publik testOtherDummyAction(): void{// Tidak dilewati.} }
Tingkat kelas:
#[RequiresPackage('symfony/console', pesan: 'Tes ini memerlukan Konsol Symfony.')]kelas akhir DummyTest memperluas TestCase {public function testDummyAction(): void{// Dilewati jika symfony/console tidak diinstal, bersama dengan pesan khusus.}public function testOtherDummyAction(): void{// Dilewati jika symfony/console tidak diinstal, bersama dengan pesan khusus. } }
Tingkat metode:
kelas terakhir DummyTest memperluas TestCase { #[RequiresPackage('symfony/console', pesan: 'Tes ini memerlukan Konsol Symfony.')]fungsi publik testDummyAction(): void{// Dilewati jika symfony/console tidak diinstal, bersama dengan pesan khusus.}fungsi publik testOtherDummyAction(): void{// Tidak dilewati.} }
Tingkat kelas:
#[RequiresPackage('symfony/console', outcomeBehavior: OutcomeBehavior::Fail)]kelas akhir DummyTest memperluas TestCase {public function testDummyAction(): void{// Gagal jika symfony/console tidak diinstal.}public function testOtherDummyAction(): void{// Gagal jika symfony/console tidak diinstal.} }
Tingkat metode:
kelas terakhir DummyTest memperluas TestCase { #[RequiresPackage('symfony/console', outcomeBehavior: OutcomeBehavior::Fail)]fungsi publik testDummyAction(): void{// Gagal jika symfony/console tidak diinstal.}fungsi publik testOtherDummyAction(): void{// Tidak gagal.} }
Tingkat kelas:
#[MemerlukanPaket('symfony/konsol')] #[RequiresPackage('guzzlehttp/guzzle')]kelas akhir DummyTest memperluas TestCase {public function testDummyAction(): void{// Dilewati jika symfony/console dan/atau guzzlehttp/guzzle tidak diinstal.}public function testOtherDummyAction(): void{// Dilewati jika symfony/console dan/atau guzzlehttp/guzzle tidak terpasang.} }
Tingkat metode:
kelas terakhir DummyTest memperluas TestCase { #[MemerlukanPaket('symfony/konsol')] #[RequiresPackage('guzzlehttp/guzzle')]fungsi publik testDummyAction(): void{// Dilewati jika symfony/console dan/atau guzzlehttp/guzzle tidak diinstal.}fungsi publik testOtherDummyAction(): void{// Tidak dilewati. } }
Silakan lihat di CONTRIBUTING.md
.
Proyek ini dilisensikan di bawah GNU General Public License 3.0 (atau lebih baru).