第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 tests
PHPUnit 4.2.0 by Sebastian Bergmann.

.................................

Time: 636 ms, Memory: 3.50Mb

OK (33 tests, 52 assertions)

注記

PHPUnit のコマンドラインテストランナーでディレクトリを指定すると、 その中の *Test.php ファイルを見つけて実行します。

tests/CurrencyTest.php にあるテストケースクラス CurrencyTest で宣言されているテストだけを実行するには、 次のコマンドを実行します。

phpunit tests/CurrencyTest
PHPUnit 4.2.0 by Sebastian Bergmann.

........

Time: 280 ms, Memory: 2.75Mb

OK (8 tests, 8 assertions)

実行したいテストをより細かく指示するには --filter オプションを使います。

phpunit --filter testObjectCanBeConstructedForValidConstructorArgument tests
PHPUnit 4.2.0 by Sebastian Bergmann.

..

Time: 167 ms, Memory: 3.00Mb

OK (2 test, 2 assertions)

注記

この方式の欠点は、テストの実行順を制御できないことです。 そのため、テストの依存性に関する問題を引き起こすことがあります。 「テストの依存性」 を参照ください。 次の節では、テストの実行順序を XML 設定ファイルで明示的に指定する方法を説明します。

XML 設定ファイルを用いたテストスイートの構成

PHPUnit の XML 設定ファイル (付録 C) を使ってテストスイートを構成することもできます。 例 5.1 に、最小限の例を示します。これは、 tests を再帰的に探索して *Test.php というファイルにある *Test クラスをすべて追加する設定です。

例 5.1: XML 設定ファイルを用いたテストスイートの構成

<phpunit>
  <testsuites>
    <testsuite name="money">
      <directory>tests</directory>
    </testsuite>
  </testsuites>
</phpunit>


どのテストを実行するのかを明示的に指定することができます。

例 5.2: XML 設定ファイルを用いたテストスイートの構成

<phpunit>
  <testsuites>
    <testsuite name="money">
      <file>tests/IntlFormatterTest.php</file>
      <file>tests/MoneyTest.php</file>
      <file>tests/CurrencyTest.php</file>
    </testsuite>
  </testsuites>
</phpunit>


このページの改善案をGitHubで提案してください!