具有附加屬性的 Composer 函式庫,可增強 PHPUnit 的測試。
作曲家要求 --dev elishaeussler/phpunit-attributes
該函式庫附帶了一個隨時可用的 PHPUnit 擴充功能。它必須在您的 PHPUnit 設定檔中註冊:
<?xml 版本=“1.0”編碼=“UTF-8”?> <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="供應商/phpunit/phpunit/phpunit.xsd" bootstrap =“供應商/autoload.php” >+ <extensions>+ <bootstrap class="EliasHaeusslerPHPUnitAttributesPHPUnitAttributesExtension" />+ </extensions> <testsuites> <測試套件名稱=“單元”> <目錄>測試</目錄> </測試套件> </測試套件> <來源> <包括> <目錄>src</目錄> </包括> </來源> </phpunit>
某些屬性可以使用自訂擴充參數進行配置。這些必須添加到擴展註冊部分,如下所示:
<extensions>- <bootstrap class="EliasHaeusslerPHPUnitAttributesPHPUnitAttributesExtension" />+ <bootstrap class="EliasHaeusslerPHPUnitAttributesPHPUnitAttributesExtension">+ <parameter name="fancyParameterName=" exue="
該庫附帶以下屬性:
#[RequiresClass]
#[RequiresPackage]
#[RequiresClass]
範圍:類別和方法級別
使用此屬性,可以將測試或測試案例標記為僅在某個類別存在時才執行。給定的類別必須可由目前類別載入器(通常是 Composer 的預設類別載入器)載入。
預設情況下,會跳過需要不存在類別的測試案例。但是,可以使用handleMissingClasses
擴充參數來配置此行為。如果設定為fail
,缺少類別的測試案例將失敗(預設為skip
):
<副檔名> <bootstrap class="EliasHaeusslerPHPUnitAttributesPHPUnitAttributesExtension"> <參數名稱=“handleMissingClasses”值=“失敗”/> </引導> </擴展名>
最終類別 DummyTest 擴展了 TestCase { #[RequiresClass(AnImportantClass::class)]public function testDummyAction(): void{// ...} }
班級級別:
#[RequiresClass(AnImportantClass::class)]最終類別 DummyTest 擴充 TestCase {public function testDummyAction(): void{// 如果缺少 AnImportantClass,則跳過。 }
方法等級:
最終類別 DummyTest 擴展了 TestCase { #[RequiresClass(AnImportantClass::class)]public function testDummyAction(): void{// 如果 AnImportantClass 缺失則跳過。 }
班級級別:
#[RequiresClass(AnImportantClass::class, '此測試需要 `AnImportantClass` 類別。')]final class DummyTest 擴充 TestCase {public function testDummyAction(): void{// 如果缺少 AnImportantClass,則跳過,以及自訂訊息。 }public function testOtherDummyAction(): void{// 如果缺少 AnImportantClass,則跳過,以及自訂訊息。 }
方法等級:
最終類別 DummyTest 擴展了 TestCase { #[RequiresClass(AnImportantClass::class, '此測試需要 `AnImportantClass` 類別。')]public function testDummyAction(): void{// 如果缺少 AnImportantClass 以及自訂訊息,則跳過。 void{// 不跳過。 }
班級級別:
#[RequiresClass(AnImportantClass::class,outcomeBehavior: OutcomeBehavior::Fail)]final class DummyTest 擴充 TestCase {public function testDummyAction(): void{// 如果缺少 AnImportantClass,則失敗。 }
方法等級:
最終類別 DummyTest 擴展了 TestCase { #[RequiresClass(AnImportantClass::class, OutcomeBehavior: OutcomeBehavior::Fail)]public function testDummyAction(): void{// 如果 AnImportantClass 缺失則失敗。 }
班級級別:
#[RequiresClass(AnImportantClass::class)] #[RequiresClass(AnotherVeryImportantClass::class)]最終類別 DummyTest 擴充 TestCase {public function testDummyAction(): void{// 如果缺少 AnImportantClass 和/或 AnotherVeryImportantClass,則跳過。 }public function testOtherDummyAction(): void{/// 如果缺少 AnImportantClass 和/或 AnotherVeryImportantClass,則跳過。 }
方法等級:
最終類別 DummyTest 擴展了 TestCase { #[RequiresClass(AnImportantClass::class)] #[RequiresClass(AnotherVeryImportantClass::class)]public function testDummyAction(): void{// 如果 AnImportantClass 和/或 AnotherVeryImportantClass 缺失則跳過。 }public function testOtherDummyAction(): void{///不跳過 }。 }
#[RequiresPackage]
範圍:類別和方法級別
此屬性可用於定義單一測試以及完整測試類別的特定套件要求。所需的套件預計將透過 Composer 安裝。您可以選擇定義版本約束和自訂訊息。
重要的
此屬性根據 Composer 建置的建置時所產生的InstalledVersions
類別來決定已安裝的 Composer 套件。為了正確讀取此類,必須在 PHPUnit 引導腳本中包含 Composer 產生的自動載入器:
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd" bootstrap="vendor/autoload.php"><! -- ... --></phpunit>
您也可以將腳本作為命令選項傳遞: phpunit --bootstrap vendor/autoload.php
預設情況下,不符合要求的測試案例將被跳過。但是,可以使用handleUnsatisfiedPackageRequirements
擴充參數來配置此行為。如果設定為fail
,不滿足要求的測試案例將失敗(預設為skip
):
<副檔名> <bootstrap class="EliasHaeusslerPHPUnitAttributesPHPUnitAttributesExtension"> <parameter name="handleUnsatisfiedPackageRequirements" value="失敗" /> </引導> </擴展名>
最終類別 DummyTest 擴展了 TestCase { #[RequiresPackage('symfony/console')]public function testDummyAction(): void{// ...} }
班級級別:
#[RequiresPackage('symfony/console')]最終類別 DummyTest 擴展了 TestCase {public function testDummyAction(): void{// 如果未安裝 symfony/console,則跳過。 }
方法等級:
最終類別 DummyTest 擴展了 TestCase { #[RequiresPackage('symfony/console')]public function testDummyAction(): void{// 如果未安裝 symfony/console 則跳過。 }
班級級別:
#[RequiresPackage('symfony/*')]最終類別 DummyTest 擴展了 TestCase {public function testDummyAction(): void{// 如果沒有安裝 symfony/* 軟體包則跳過。 }
方法等級:
最終類別 DummyTest 擴展了 TestCase { #[RequiresPackage('symfony/*')]public function testDummyAction(): void{// 如果沒有安裝 symfony/* 套件則跳過。 }
班級級別:
#[RequiresPackage('symfony/console', '>= 7')]最終類別 DummyTest 擴充 TestCase {public function testDummyAction(): void{// 如果已安裝的symfony/console 版本< 7,跳過。 } }
方法等級:
最終類別 DummyTest 擴展了 TestCase { #[RequiresPackage('symfony/console', '>= 7')]public function testDummyAction(): void{// 如果安裝的symfony/console 版本< 7 則跳過。 /沒有跳過。 }
班級級別:
#[RequiresPackage('symfony/console', message: '此測試需要 Symfony 控制台。')]final class DummyTest 擴充 TestCase {public function testDummyAction(): void{// 如果未安裝symfony/console,則跳過,並附帶自訂訊息。並附帶自訂訊息。 }
方法等級:
最終類別 DummyTest 擴展了 TestCase { #[RequiresPackage('symfony/console', message: '此測試需要Symfony 控制台。')]public function testDummyAction(): void{// 如果未安裝symfony/console 則跳過,並附帶自訂訊息。 public function testOtherDummyAction(): void{// 不跳過。 }
班級級別:
#[RequiresPackage('symfony/console',outcomeBehavior: OutcomeBehavior::Fail)]最終類別 DummyTest 擴充 TestCase {public function testDummyAction(): void{// 若未安裝 symfony/console,則失敗。 }
方法等級:
最終類別 DummyTest 擴展了 TestCase { #[RequiresPackage('symfony/console', OutcomeBehavior: OutcomeBehavior::Fail)]public function testDummyAction(): void{// 如果未安裝symfony/console,則會失敗。不會失敗。 }
班級級別:
#[RequiresPackage('symfony/console')] #[RequiresPackage('guzzlehttp/guzzle')]最終類別 DummyTest 擴展了 TestCase {public function testDummyAction(): void{// 如果未安裝symfony/console 和/或guzzlehttp/guzzle,則跳過。 guzzle,則跳過已安裝。 }
方法等級:
最終類別 DummyTest 擴展了 TestCase { #[RequiresPackage('symfony/console')] #[RequiresPackage('guzzlehttp/guzzle')]public function testDummyAction(): void{// 如果未安裝symfony/console 和/或guzzlehttp/guzzle 則跳過。過。 }
請查看CONTRIBUTING.md
。
該專案已獲得 GNU 通用公共授權 3.0(或更高版本)的授權。