先日、今年の 1 月以来となる Stagehand_TestRunner の最新バージョン 2.7.0 のリリースを行いました。コマンドラインのテストランナーを提供するこのプロダクトは、テスト駆動開発 (TDD: Test Driven Development) をより快適にすることを目的としています。
今回は Stagehand_TestRunner の特徴と使い方をご紹介いたします。
Stagehand_TestRunner とは?
Stagehand_TestRunner とは、PHPUnit や SimpleTest といった PHP のテスティングフレームワーク向けに書かれたテストの実行に特化した Piece Framework のプロダクトで、下記のような特徴があります。
- 指定されたディレクトリに含まれるテストの実行
- 指定されたファイルに含まれるテストの実行
- 指定されたファイルの指定されたテストのみの実行 (PHPUnit のみ)
- テスト結果の色付け
- 指定された PHP スクリプトのテスト実行前のプリロード
- 指定されたディレクトリの変更の監視および変更検出時のテストの実行
- Growl へのテスト結果の通知
- JUnit XML フォーマットによる、指定されたファイルへのテスト結果のロギング (PHPUnit および PHPT)
- 詳細な進捗リポートの出力 (PHPUnit および PHPT)
- PHPUnit, PHPT, SimpleTest, PHPSpec のサポート
これらの特徴は、TDD による PHP アプリケーションの開発を強力にサポートします。
Stagehand_TestRunner のインストール
Stagehand_TestRunner は PEAR パッケージ として提供されており、Piece Framework の PEAR チャネル、pear.piece-framework.com からインストールすることができます。
pear channel-discover pear.piece-framework.com pear install piece/stagehand_testrunner
今回のバージョンから、新たに多くのパッケージへの依存が追加されました。中には beta バージョンのパッケージも含まれているため、PEAR の構成 Preferred Package State (preferred_state) が stable になっている場合は、手作業でそれぞれの依存パッケージをインストールする必要があります。これが面倒な場合は、一時的に Preferred Package State (preferred_state) を beta に変更してからインストールを行ってください。
ちなみにこれらの依存パッケージの多くは、Stagehand_TestRunner から再利用可能なコードを分離することによって作成されたものです。これらのパッケージについては後日改めてご紹介いたします。
次に先述の特徴を実現するコマンドラインを解説します。
指定されたディレクトリに含まれるテストの実行
phpunitrunner DIRECTORY phpunitrunner -R DIRECTORY
指定されたディレクトリをスキャンし、テストを実行します。-R オプションを指定した場合、下位ディレクトリを再帰的にスキャンします。
指定されたファイルに含まれるテストの実行
phpunitrunner FILE
指定されたファイルに対してのみテストを実行します。
指定されたファイルの指定されたテストのみの実行 (PHPUnit のみ)
phpunitrunner -m METHOD1,METHOD2,... FILE
指定されたファイルに含まれる指定されたテストメソッドを実行します。カンマによって複数のメソッドを指定することができます。
これまでバージョンでは、特定のテストのみを実行したい場合それ以外のテストをコメントアウトするといった泥臭い作業が必要でした。
テスト結果の色付け
phpunitrunner -c DIRECTORY_OR_FILE
ノート: この機能をご利用いただくには、Console_Color 1.0.2 以降が必要となります。この機能は Windows ではご利用いただけません。
結果の色付けによって、テストにパスしたかどうかがわかりやすくなります。
先述のスクリーンショットはすべて -c オプション付きで実行されたものです。
指定された PHP スクリプトのテスト実行前のプリロード
phpunitrunner -p FILE DIRECTORY_OR_FILE
include_path, オートローディング、エラーハンドリングなど、テストの実行のための準備を行うためのスクリプトを指定することができます。指定されたスクリプトは、テストランナー本体がロードされるよりも前に実行されます。
実際の例を見てみましょう。下記は、Piece Framework のプロダクト、Stagehand_AccessControl のスクリプトです。
tests/prepare.php
<?php
error_reporting(E_ALL | E_STRICT);
set_include_path(realpath(dirname(__FILE__) . '/../src') . PATH_SEPARATOR .
get_include_path()
);
require_once 'PHPUnit/Framework.php';
require_once 'Stagehand/Autoload.php';
$loader = Stagehand_Autoload::legacyLoader();
$loader->addNamespace('Stagehand');
Stagehand_Autoload::register($loader);
Stagehand_LegacyError_PHPError::enableConversion();
指定されたディレクトリの変更の監視および変更検出時のテストの実行
phpunitrunner -a DIRECTORY phpunitrunner -a -w DIRECTORY1,DIRECTORY2,... DIRECTORY
指定されたディレクトリについて、ファイルの追加および削除、更新日時の変更の監視を行います。変更が検出されると、直ちにテストが実行されます。
デフォルトの監視対象はテストディレクトリですが、-w オプションによって監視対象のディレクトリを追加することができます。これによって、テストコードだけでなくプロダクトコードや構成ファイルなども監視することができます。
実際のスキャンにかかった時間によって監視間隔が調整されます。下限は 5 秒です。
Growl へのテスト結果の通知
phpunitrunner -g DIRECTORY_OR_FILE phpunitrunner -g --growl-password=PASSWORD DIRECTORY_OR_FILE
ノート: この機能をご利用いただくには、Net_Growl 0.7.0 以降が必要となります。
Growl に対してテストの結果を通知します。パスワードが必要な場合、--growl-password オプションによってパスワードを指定することができます。
JUnit XML フォーマットによる、指定されたファイルへのテスト結果のロギング (PHPUnit および PHPT)
phpunitrunner --log-junit=FILE DIRECTORY_OR_FILE
指定されたファイルにテストの結果を JUnit XML フォーマットで書き込みます。
この機能は、筆者らが現在開発中のプロダクト MakeGood との連携用として追加されたものですが、継続的インテグレーション (CI: Continuous Integration) ツールとの連携にも役立つでしょう。
詳細な進捗リポートの出力 (PHPUnit および PHPT)
phpunitrunner -v DIRECTORY_OR_FILE
この機能によって、PHP の Fatal error などでテストの実行が途中で終了する場合に、問題を引き起こしているテストを簡単に特定することができます。
PHPUnit, PHPT, SimpleTest, PHPSpec のサポート
ノート: それぞれのテスティングフレームワークをご利用いただくには、それぞれのプロダクトが必要となります。ただし、PHPT については、PHPUnit が必要となります。
テスティングフレームワークと Stagehand_TestRunner コマンドとの対応関係は下記のとおりです。
| UNIX | Windows | |
|---|---|---|
| PHPUnit | phpunitrunner | phpunitrunner.bat |
| PHPT | phptrunner | phptrunner.bat |
| SimpleTest | simpletestrunner | simpletestrunner.bat |
| PHPSpec | phpspecrunner | phpspecrunner.bat |
おわりに
Stagehand_TestRunner は TDD を最大限にサポートできるように設計されており、より便利なツールにするべく日々改良を続けています。また、Stagehand_TestRunner をバックエンドとする Eclipse ベースのテストランナー MakeGood のリリースも計画中です。
PHP で TDD を行っている方、これから行いたい方、PHPUnit や SimpleTest を直接お使いの方も、この機会に是非お試しください。皆様のご意見、ご感想、パッチなどお待ちしております。
参考文献
トラックバック(0)
- このブログ記事のトラックバックURL:
