PHPUnit のマニュアルには次のように書かれています。
PHPUnit コマンドライン テスト ランナーをディレクトリに指定すると、*Test.php ファイルが検索されます。
参照: http://www.phpunit.de/manual/3.6/en/organizing-tests.html#organizing-tests.filesystem
これは間違っています!
私が電話するとき:
phpunit --config myconfig.xml --bootstrap mybootstrap.php tests
すべてのphpファイルが必要です。
- 最初のアイデアは、構成 xml でブラックリストまたはホワイトリストを使用することでしたが、これらのリストはテスト対象のサブジェクトのフィルターであり、テスト クラスをフィルター処理することに気付きました。
- 次に考えたのは、構成 xml 内でテストスイートを使用することでした。しかし、現時点では、テスト スイートは定義することしかできませんが、コマンド ライン経由で実行することはできません (Jet は PHPUnit に実装されておらず、チケットは 1 年以上オープンになっています)。
- 次に考えたのは、テスト スイート ローダーを使用することでしたが、それらの使用方法に関するドキュメントが見つかりません。
私が実行すると:
phpunit --config myconfig.xml --bootstrap mybootstrap.php --loader My_Testsuite_Loader tests
PHPUnit は "tests/" にあるすべての php ファイルを取得して実行します。ファイル「My/Testsuite/Loader.php」が含まれます。PHPUnit はクラス My_Testsuite_Loader が存在するかどうかをチェックします。これまでのところすべて順調です。
「My/Testsuite/Loader.php」のテンプレートとして「PHPUnit/Runner/StandardTestSuiteLoader.php」を使用しました。メソッド「load()」および「reload()」が含まれています。どちらのメソッドも、PHPUnit フレームワークによって呼び出されることはありません。なぜだめですか?独自の testsuiteloder があれば、テスト スイートの除外スキーマを実装する機会が得られると思いました。
私のプロジェクトのサンプル ファイル システム:
<root>
|-src/MyProject/Package/Object.php
|-tests/MyProject/Package/Object/TestTemplate.php
|-tests/MyProject/Package/Object/GetFooTest.php
|-tests/MyProject/Package/Object/GetBarTest.php
|-tests/phpunit.xml
|-tests/bootstrap.php
|-tests/My/Testsuite/Loader.php
ご覧のとおり、sut (テスト対象のメソッド) に関するすべてのテストに 1 つのファイルを使用します。これらの *Test.php ファイルはすべて TestTemplate (TestCase) を継承しています。TestTemplate.php には、オブジェクト (Object.php) を初期化し、それをプライベート メンバー var に格納するセットアップがあります。
テスト スイート ローダーの使用方法 / 目的は? (パターンに適合しないテストクラスを除外する方法: "*Test.php"?)