PHPUnit によるテストを強化するための追加属性を備えた Composer ライブラリ。
作曲家には --dev eliashaeussler/phpunit-attributes が必要です
このライブラリには、すぐに使用できる PHPUnit 拡張機能が付属しています。 PHPUnit 構成ファイルに登録する必要があります。
<?xml バージョン="1.0" エンコーディング="UTF-8"?> <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd" ブートストラップ = "ベンダー/autoload.php" >+ <extensions>+ <bootstrap class="EliasHaeusslerPHPUnitAttributesPHPUnitAttributesExtension" />+ </extensions> <テストスイート> <テストスイート名="ユニット"> <ディレクトリ>テスト</ディレクトリ> </テストスイート> </テストスイート> <ソース> <含める> <ディレクトリ>ソース</ディレクトリ> </include> </ソース> </phpunit>
一部の属性はカスタム拡張パラメータを使用して構成できます。これらは、次のように拡張機能の登録セクションに追加する必要があります。
<extensions>- <bootstrap class="EliasHaeusslerPHPUnitAttributesPHPUnitAttributesExtension" />+ <bootstrap class="EliasHaeusslerPHPUnitAttributesPHPUnitAttributesExtension">+ <parameter name="fancyParameterName" value="fancyParameterValue" />+ </bootstrap> </extensions>
このライブラリには次の属性が付属しています。
#[RequiresClass]
#[RequiresPackage]
#[RequiresClass]
範囲: クラスおよびメソッドレベル
この属性を使用すると、特定のクラスが存在する場合にのみ実行されるようにテストまたはテスト ケースをマークできます。指定されたクラスは、現在のクラス ローダー (通常は Composer のデフォルトのクラス ローダー) によってロード可能である必要があります。
デフォルトでは、存在しないクラスを必要とするテスト ケースはスキップされます。ただし、この動作は、 handleMissingClasses
拡張パラメータを使用して構成できます。 fail
に設定すると、クラスが欠落しているテスト ケースは失敗します (デフォルトはskip
)。
<拡張機能> <bootstrap class="EliasHaeusslerPHPUnitAttributesPHPUnitAttributesExtension"> <parameter name="handleMissingClasses" value="fail" /> </ブートストラップ> </拡張機能>
最終クラス DummyTest は TestCase を拡張します { #[RequiresClass(An importantClass::class)]パブリック関数 testDummyAction(): void{// ...} }
クラスレベル:
#[RequiresClass(AnMinimumClass::class)]final class DummyTest は TestCase を拡張します {public function testDummyAction(): void{// AnMinimumClass が欠落している場合はスキップされます。}public function testOtherDummyAction(): void{// AnMinimumClass が欠落している場合はスキップされます。} }
メソッドレベル:
最終クラス DummyTest は TestCase を拡張します { #[RequiresClass(AnMinimumClass::class)]public function testDummyAction(): void{// AnMinimumClass が欠落している場合はスキップされます。}public function testOtherDummyAction(): void{// スキップされません。} }
クラスレベル:
#[RequiresClass(AnMinimumClass::class, 'このテストには `AnMinimumClass` クラスが必要です。')]final class DummyTest extends TestCase {public function testDummyAction(): void{// AnMinimumClass が欠落しており、カスタム メッセージも含まれている場合はスキップされます。}public function testOtherDummyAction(): void{// AnMinimumClass が欠落しており、カスタム メッセージも含まれている場合はスキップされます。} }
メソッドレベル:
最終クラス DummyTest は TestCase を拡張します { #[RequiresClass(AnMinimumClass::class, 'このテストには `AnMinimumClass` クラスが必要です。')]public function testDummyAction(): void{// AnMinimumClass がカスタム メッセージとともに欠落している場合はスキップされます。}public function testOtherDummyAction(): void{// スキップされません。} }
クラスレベル:
#[RequiresClass(AnMinimumClass::class,outcomeBehavior:OutcomeBehavior::Fail)]final class DummyTest extends TestCase {public function testDummyAction(): void{// AnMinimumClass が欠落している場合は失敗します。}public function testOtherDummyAction(): void{// AnMinimumClass が欠落している場合は失敗します。} }
メソッドレベル:
最終クラス DummyTest は TestCase を拡張します { #[RequiresClass(AnMinimumClass::class,outcomeBehavior:OutcomeBehavior::Fail)]public function testDummyAction(): void{// AnMinimumClass が見つからない場合は失敗します。}public function testOtherDummyAction(): void{// 失敗しません。} }
クラスレベル:
#[RequiresClass(重要クラス::クラス)] #[RequiresClass(AnotherVery importantClass::class)]final class DummyTest は TestCase を拡張します {public function testDummyAction(): void{// AnMinimumClass および/または AnotherVeryMinimumClass が欠落している場合はスキップされます。}public function testOtherDummyAction(): void{// AnMinimumClass および/または AnotherVeryMinimumClass が欠落している場合はスキップされます。} }
メソッドレベル:
最終クラス DummyTest は TestCase を拡張します { #[RequiresClass(重要クラス::クラス)] #[RequiresClass(AnotherVery importantClass::class)]public function testDummyAction(): void{// AnMinimumClass および/または AnotherVeryMinimumClass が欠落している場合はスキップされます。}public function testOtherDummyAction(): void{// スキップされません。} }
#[RequiresPackage]
範囲: クラスおよびメソッドレベル
この属性は、単一のテストおよび完全なテスト クラスに対する特定のパッケージ要件を定義するために使用できます。必要なパッケージは Composer 経由でインストールされることが予想されます。オプションで、バージョン制約とカスタム メッセージを定義できます。
重要
この属性は、Composer によってビルドされたビルド時に生成されたInstalledVersions
クラスから、インストールされている Composer パッケージを決定します。このクラスから適切に読み取るには、Composer が生成したオートローダーを PHPUnit ブートストラップ スクリプトに含める必要があります。
<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="fail" /> </ブートストラップ> </拡張機能>
最終クラス DummyTest は TestCase を拡張します { #[RequiresPackage('symfony/console')]パブリック関数 testDummyAction(): void{// ...} }
クラスレベル:
#[RequiresPackage('symfony/console')]final class DummyTest は TestCase を拡張します {public function testDummyAction(): void{// symfony/console がインストールされていない場合はスキップされます。}public function testOtherDummyAction(): void{// symfony/console がインストールされていない場合はスキップされます。} }
メソッドレベル:
最終クラス DummyTest は TestCase を拡張します { #[RequiresPackage('symfony/console')]public function testDummyAction(): void{// symfony/console がインストールされていない場合はスキップされます。}public function testOtherDummyAction(): void{// スキップされません。} }
クラスレベル:
#[RequiresPackage('symfony/*')]final クラス DummyTest は TestCase を拡張します {public function testDummyAction(): void{// symfony/* パッケージがインストールされていない場合はスキップされます。}public function testOtherDummyAction(): void{// symfony/* パッケージがインストールされていない場合はスキップされます。} }
メソッドレベル:
最終クラス DummyTest は TestCase を拡張します { #[RequiresPackage('symfony/*')]public function testDummyAction(): void{// symfony/* パッケージがインストールされていない場合はスキップされます。}public function testOtherDummyAction(): void{// スキップされません。} }
クラスレベル:
#[RequiresPackage('symfony/console', '>= 7')]final クラス DummyTest は TestCase を拡張します {public function testDummyAction(): void{// インストールされている symfony/console のバージョンが 7 未満の場合はスキップされます。}public function testOtherDummyAction(): void{// symfony/console のインストールされているバージョンが 7 未満の場合はスキップされます。} }
メソッドレベル:
最終クラス DummyTest は TestCase を拡張します { #[RequiresPackage('symfony/console', '>= 7')]public function testDummyAction(): void{// インストールされている symfony/console のバージョンが 7 未満の場合はスキップされます。}public function testOtherDummyAction(): void{//スキップされません。} }
クラスレベル:
#[RequiresPackage('symfony/console', message: 'このテストには Symfony コンソールが必要です。')]final class DummyTest extends TestCase {public function testDummyAction(): void{// symfony/console がインストールされていない場合、カスタム メッセージとともにスキップされます。}public function testOtherDummyAction(): void{// symfony/console がインストールされていない場合、カスタム メッセージとともにスキップされます。 } }
メソッドレベル:
最終クラス DummyTest は TestCase を拡張します { #[RequiresPackage('symfony/console', message: 'このテストには Symfony Console が必要です。')]public function testDummyAction(): void{// symfony/console がインストールされていない場合は、カスタム メッセージとともにスキップされます。}public function testOtherDummyAction(): void{// スキップされません。} }
クラスレベル:
#[RequiresPackage('symfony/console',outcomeBehavior: OutcomeBehavior::Fail)]final class DummyTest extends TestCase {public function testDummyAction(): void{// symfony/console がインストールされていない場合は失敗します。}public function testOtherDummyAction(): void{// symfony/console がインストールされていない場合は失敗します。} }
メソッドレベル:
最終クラス DummyTest は TestCase を拡張します { #[RequiresPackage('symfony/console',outcomeBehavior: OutcomeBehavior::Fail)]public function testDummyAction(): void{// symfony/console がインストールされていない場合は失敗します。}public function testOtherDummyAction(): void{// ではありません失敗。} }
クラスレベル:
#[RequiresPackage('symfony/console')] #[RequiresPackage('guzzlehttp/guzzle')]final class DummyTest は TestCase を拡張します {public function testDummyAction(): void{// symfony/console および/または guzzlehttp/guzzle がインストールされていない場合はスキップされます。}public function testOtherDummyAction(): void{// symfony/console および/または guzzlehttp/guzzle がインストールされていない場合はスキップされますインストールされています。} }
メソッドレベル:
最終クラス DummyTest は TestCase を拡張します { #[RequiresPackage('symfony/console')] #[RequiresPackage('guzzlehttp/guzzle')]public function testDummyAction(): void{// symfony/console および/または guzzlehttp/guzzle がインストールされていない場合はスキップされます。}public function testOtherDummyAction(): void{// スキップされません。 } }
CONTRIBUTING.md
をご覧ください。
このプロジェクトは、GNU General Public License 3.0 (またはそれ以降) に基づいてライセンスされています。