PHPUnitの概要と導入
PHPUnitとそのメリット
本連載では、PHP(PHP: Hypertext Preprocessor)で実装されたプログラムの単体テストをテスト・ツール「PHPUnit」を使って行う方法について、基本から実践的な利用方法までを4回にわたって紹介します。
ユニット・テスト(単体テスト)とは、プログラムの構成要素であるクラスや関数などの単位で動作を確認するためのテストです。PHPUnitを利用することで、単体テストの手順をPHPプログラムとして作成し、コマンド・ラインなどからバッチ処理的に実行することが可能になります。
PHPプログラムのテストと言えば、もっぱら人手でブラウザを操作して画面遷移を確認したり、フォームに値を入力して実行結果を目で確認したりすることが一般的だと思います。しかし、開発時に何度も同じようにページを開いて、同じようにテスト・データを入力し、結果が正しいことをすべて手動で行うのは、かなり骨の折れる作業です。
また、やっかいなことに、影響範囲の大きなプログラムを修正した後では、あらためて全体的にテストをやり直すことになり、単調な作業を延々と繰り返すことになります。
PHPUnitは、xUnitと呼ばれるユニット・テスト向けフレームワークのPHP版で、2010年3月時点の最新版は「PHPUnit 3.4.11」です。
PHPUnitを利用するメリットは、手動では面倒なテスト手順を自動化して繰り返し実行できるようになることです。
コマンド1つで何度でもテストを実行できるので、テスト効率を向上できると同時に、人手によるミスも無くすことができます。さらに、作成したテスト・プログラムは仕様書の代わりとなり、継続的にプログラムを改良する過程で既存の処理が正しく動作することの確認、いわゆる“デグレ”(degrade、バージョン・アップにともなう品質の低下)の防止にも利用できます。ひいてはプログラム品質の維持、向上につなげることができます。
特にPHPUnitの利用が有効なテストの例としては、下記が挙げられます。
- 入力値の組み合わせパターンが多いテストの自動化
- データの前準備が必要なテストの自動化
- 不具合の発生した処理の回帰テスト
<code> <?php class Hello { public function getMessage() { return "hello world"; } } ?> </code>
図1:テスト対象プログラム
PHPUnitのインストール
PHPUnitをインストールしてみましょう。
PHPUnitは、PHPの標準ライブラリ仕様であるPEAR(PHP Extension and Application Repository)ライブラリとして配布されており、pearコマンドを使って簡単にインストールして使用することができます。
今回は、CentOSなどのLinux環境を前提として、すでにPHP 5.2以上がインストールされているものとします。
root権限で以下のコマンドを実行します。
<code># pear channel-discover pear.phpunit.de Adding Channel "pear.phpunit.de" succeeded Discovery of channel "pear.phpunit.de" succeeded # pear install phpunit/PHPUnit Unknown remote channel: pear.symfony-project.com Did not download optional dependencies: pear/Image_GraphViz, pear/Log, channel://pear.symfony-project.com/YAML, use --alldeps to download automatically phpunit/PHPUnit can optionally use package "pear/Image_GraphViz" (version >= 1.2.1) phpunit/PHPUnit can optionally use package "pear/Log" phpunit/PHPUnit can optionally use package "channel://pear.symfony-project.com/YAML" (version >= 1.0.2) phpunit/PHPUnit can optionally use PHP extension "soap" phpunit/PHPUnit can optionally use PHP extension "xdebug" (version >= 2.0.5) downloading PHPUnit-3.4.11.tgz ... Starting to download PHPUnit-3.4.11.tgz (254,439 bytes) .....................................................done: 254,439 bytes install ok: channel://pear.phpunit.de/PHPUnit-3.4.11 </code>
PHPUnitのインストールが終わったら、phpunitコマンドを実行して動作を確認します。
<code> $ phpunit --version PHPUnit 3.4.11 by Sebastian Bergmann. </code>
上記のようにバージョンが表示されていれば、インストールは無事に終了です。
テスト対象プログラムの作成
続いて、簡単なプログラムを用意して、実際にテストを実行してみます。
まずはテスト対象のプログラムを作成してみます。Hello.phpファイルを作成し、HelloクラスにgetMessage()メソッドを定義しま す(図1)。このメソッドは単純に"hello world"という文字列を返します。
このプログラムの使い方ですが、コマンド・ラインからphpのインタラクティブ・シェルを起動して、実際にgetMessage()メソッドを呼び出し てみます。インタラクティブ・シェル機能を使うには、phpコンパイル時に「--with-readline」オプションを指定しておく必要があります。 インタラクティブ・シェルが使えない環境では、通常のようにファイルにコードを記述して実行してください。
<code> $ php -a Interactive shell php > include 'Hello.php'; php > $hello = new Hello(); php > echo $hello->getMessage(),"\n"; hello world </code>
上の結果から、getMessage()メソッドが"hello world"という文字列を返すことを確認できました。
次ページからは、PHPUnitを使ってテストを自動化してみます。