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 クラスをすべて追加する設定です。

Example 5.1 XML 設定ファイルを用いたテストスイートの構成
<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 設定ファイルで明示的に指定することもできます。

Example 5.2 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>