| ユーザフォーラムで議論/質問 | マニュアル検索 | ハイライト | ハイライトオフ | ポータル | php spot |
チュートリアルチュートリアル –
PHPUnit 簡易チュートリアル
テストフレームワークの紹介PHPUnit は、関数やクラスを自動的にテストする "テストスイート" を作成するためのシンプルなフレームワークを提供します。 PHPUnit は、JUnit からヒントを得ています。 JUnit は、Kent Beck と Erich Gamma が、 eXtreme Programming (XP) 用のツールとして作成したソフトウエアです。XP においては、 小さなソフトウエアコンポーネントを可能な限り早期に頻繁に試験すること、 というルールが定められています。こうすることで、 アプリケーション全体を設定し試験する際になってまで、コンポーネント内部のバグやエラーを 修正する破目にならなくてすみます。ユニットテストと呼ばれるこういったコンポーネント毎の テストは XP の基本原則のひとつですが、だからといって PHPUnit を利用するために XP を実行しないといけない訳ではありません。 PHPUnitは、単体として、クラスや関数をテストする有効なツールであり、 際限のないデバッグ作業を避けるのに有用です。 実行手順これまでに行われている良くあるテスト手順は、何らかのクラスを作成した後、 echo() や var_dump() を用いて非体系的にテストを行い、不具合が発生しないことを願う、という流れでしょう。 PHPUnit を使って利益を得るためには、この流れを再考する必要があります。 最善の手順は、以下の通り行うことです。
クラスの設計簡単な例として、文字列を処理するクラスを取り上げます。 まず、文字列処理を行う一連の関数の宣言を以下のように作成します。
<?php
テストスイートの作成次に、この文字列処理クラスの各関数をテストするテストスイートを作成します。 テストスイートは、 PHPUnit_TestCase を継承した通常の PHP クラスで、このクラス中に 名称が 'test' で始まる "テスト関数" を定義していきます。 テスト関数においては、テスト対象の関数の帰り値と ありうべき正しい値との比較を行います。 この比較は、assert*() 系の関数を使って行い、 テストに合格したかどうかの判断が行われます。
<?php
テストの実行それでは、テストを実行してみましょう。 パスが正しいか確認し、この PHP プログラムを実行してください。
<?php
コマンドラインで実行すると、以下の出力が得られます。 TestCase stringtest->testtostring() failed: expected true, actual false TestCase stringtest->testcopy() failed: expected , actual Object TestCase stringtest->testadd() failed: expected true, actual false まだ実装が行われておらず、各文字列処理関数は正しい値を返しませんので、 すべての関数がテストに不合格となります。 ブラウザから実行したい場合は、 $result->toString() を $result->toHTML () へ変更してください。HTML ページが出力されます。 実装文字列処理クラスの実装を行いましょう。
<?php
実装が終了したら、テストを実行します。 ~>php -f stringtest.php TestCase stringtest->testtostring() passed TestCase stringtest->testcopy() passed TestCase stringtest->testadd() failed: expected true, actual false あれ、最後のテストが不合格です。タイプミスをしたようです。 string.php の 16 行目を以下の様に修正します。
<?php
そして、テストを再実行します。 ~>php -f stringtest.php TestCase stringtest->testtostring() passed TestCase stringtest->testcopy() passed TestCase stringtest->testadd() passed すべて合格しました。 まとめたった3つの単純な関数しかないクラスに対しては、大袈裟な手順かも知れません。 しかし、上記は短い例に過ぎないのであって、オンラインショップの ショッピングカートやデータベース抽象化クラスなどの、 大きくて複雑な API を持つクラスを考えて見てください。 PHPUnit は、実装中に潜むバグを見つけるのに非常に有用なツールなのです。 また、以前に使ったクラスの再実装をするような場合を考えると、 テストスイート無しでは、そのクラスに依存するアプリケーションに 不具合を発生させる可能性が高くなります。 まずテストスイートを作成し、新しいクラスがテストにすべて合格するように保ったまま 再実装を行っていけば、アプリケーションに不具合が起きる事はないでしょう。 |
各種マニュアル:
PHPマニュアル |
PEARマニュアル |
Smarty(英語)マニュアル |
PHP-GTKマニュアル |
「チュートリアル」をGoogle検索
|