| コメント(0) | トラックバック(0)

先日、今年の 1 月以来となる Stagehand_TestRunner の最新バージョン 2.7.0 のリリースを行いました。コマンドラインのテストランナーを提供するこのプロダクトは、テスト駆動開発 (TDD: Test Driven Development) をより快適にすることを目的としています。

今回は Stagehand_TestRunner の特徴と使い方をご紹介いたします。

KUBO Atsuhiro

Stagehand_TestRunner とは?

Stagehand_TestRunner とは、PHPUnitSimpleTest といった PHP のテスティングフレームワーク向けに書かれたテストの実行に特化した Piece Framework のプロダクトで、下記のような特徴があります。

  • 指定されたディレクトリに含まれるテストの実行
  • 指定されたファイルに含まれるテストの実行
  • 指定されたファイルの指定されたテストのみの実行 (PHPUnit のみ)
  • テスト結果の色付け
  • 指定された PHP スクリプトのテスト実行前のプリロード
  • 指定されたディレクトリの変更の監視および変更検出時のテストの実行
  • Growl へのテスト結果の通知
  • JUnit XML フォーマットによる、指定されたファイルへのテスト結果のロギング (PHPUnit および PHPT)
  • 詳細な進捗リポートの出力 (PHPUnit および PHPT)
  • PHPUnit, PHPT, SimpleTest, PHPSpec のサポート

これらの特徴は、TDD による PHP アプリケーションの開発を強力にサポートします。

Stagehand_TestRunner のインストール

Stagehand_TestRunnerPEAR パッケージ として提供されており、Piece FrameworkPEAR チャネル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 オプションを指定した場合、下位ディレクトリを再帰的にスキャンします。

runs-tests-in-the-specified-directory.png

指定されたファイルに含まれるテストの実行

phpunitrunner FILE

指定されたファイルに対してのみテストを実行します。

runs-tests-in-the-specified-file.png

指定されたファイルの指定されたテストのみの実行 (PHPUnit のみ)

phpunitrunner -m METHOD1,METHOD2,... FILE

指定されたファイルに含まれる指定されたテストメソッドを実行します。カンマによって複数のメソッドを指定することができます。

これまでバージョンでは、特定のテストのみを実行したい場合それ以外のテストをコメントアウトするといった泥臭い作業が必要でした。

runs-only-the-specified-tests-in-the-specified-file.png

テスト結果の色付け

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 などでテストの実行が途中で終了する場合に、問題を引き起こしているテストを簡単に特定することができます。

prints-detailed-progress-report.png

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 を行っている方、これから行いたい方、PHPUnitSimpleTest を直接お使いの方も、この機会に是非お試しください。皆様のご意見、ご感想、パッチなどお待ちしております。

参考文献

トラックバック(0)
  • このブログ記事のトラックバックURL:
コメント