5. テストの構成
PHPUnit の目指すところのひとつに 「自由に組み合わせられる」ということがあります。つまり、 例えば「そのプロジェクトのすべてのテストを実行する」「プロジェクトの中の ある部品を構成するすべてのクラスについて、すべてのテストを実行する」 「特定のひとつのクラスのテストのみを実行する」など、 数や組み合わせにとらわれずに好きなテストを一緒に実行できるということです。
PHPUnit では、さまざまな方法でテストを組み合わせてテストスイートにまとめることができます。 本章では、その中でもよく使われる手法を説明します。
ファイルシステムを用いたテストスイートの構成
おそらく、テストスイートをとりまとめるもっとも簡単な方法は すべてのテストケースのソースファイルを一つのテストディレクトリにまとめることでしょう。 PHPUnit はテストディレクトリを再帰的に探索し、 テストを自動的に見つけて実行します。
sebastianbergmann/money
ライブラリのテストスイートを見てみましょう。このプロジェクトのディレクトリ構成を見ると、
テストケースクラスが tests
ディレクトリにまとめられていることがわかります。
その中のディレクトリの構造は、テスト対象のシステム (SUT) がある
src
ディレクトリ以下の構造と同じになっています。
src tests
`-- Currency.php `-- CurrencyTest.php
`-- IntlFormatter.php `-- IntlFormatterTest.php
`-- Money.php `-- MoneyTest.php
`-- autoload.php
PHPUnit のコマンドラインテストランナーに テストディレクトリの場所を指示することで、 このライブラリのすべてのテストを実行できます。
$ phpunit --bootstrap src/autoload.php tests PHPUnit main.0 by Sebastian Bergmann and contributors. ................................. Time: 636 ms, Memory: 3.50Mb OK (33 tests, 52 assertions)
Note
PHPUnit のコマンドラインテストランナーでディレクトリを指定すると、
その中の *Test.php
ファイルを見つけて実行します。
tests/CurrencyTest.php
にあるテストケースクラス
CurrencyTest
で宣言されているテストだけを実行するには、
次のコマンドを実行します。
$ phpunit --bootstrap src/autoload.php tests/CurrencyTest.php PHPUnit main.0 by Sebastian Bergmann and contributors. ........ Time: 280 ms, Memory: 2.75Mb OK (8 tests, 8 assertions)
実行したいテストをより細かく指示するには
--filter
オプションを使います。
$ phpunit --bootstrap src/autoload.php --filter testObjectCanBeConstructedForValidConstructorArgument tests PHPUnit main.0 by Sebastian Bergmann and contributors. .. Time: 167 ms, Memory: 3.00Mb OK (2 test, 2 assertions)
Note
この方式の欠点は、テストの実行順を制御できないことです。 そのため、テストの依存性に関する問題を引き起こすことがあります。 テストの依存性 を参照ください。 次の節では、テストの実行順序を XML 設定ファイルで明示的に指定する方法を説明します。
XML 設定ファイルを用いたテストスイートの構成
PHPUnit の XML 設定ファイル (XML 設定ファイル)
を使ってテストスイートを構成することもできます。
Example 5.1
に、最小限の phpunit.xml
ファイルを示します。これは、
tests
ディレクトリを再帰的に探索して
*Test.php
というファイルにある
*Test
クラスをすべて追加する設定です。
<phpunit bootstrap="src/autoload.php">
<testsuites>
<testsuite name="money">
<directory>tests</directory>
</testsuite>
</testsuites>
</phpunit>
特定のテストスイートを実行したい場合は、--testsuite
オプションを利用します。
$ phpunit --bootstrap src/autoload.php --testsuite money PHPUnit main.0 by Sebastian Bergmann and contributors. .. Time: 167 ms, Memory: 3.00Mb OK (2 test, 2 assertions)
--configuration
が設定
されていない 場合は、現在の作業ディレクトリから
phpunit.xml
あるいは
phpunit.xml.dist
を (この順に) 探し、
見つかった場合はそれを自動的に読み込みます。
また以下のように、テストの実行順序を XML 設定ファイルで明示的に指定することもできます。
<phpunit bootstrap="src/autoload.php">
<testsuites>
<testsuite name="money">
<file>tests/IntlFormatterTest.php</file>
<file>tests/MoneyTest.php</file>
<file>tests/CurrencyTest.php</file>
</testsuite>
</testsuites>
</phpunit>