ユニットテスト

Yii のテストフレームワークは PHPUnit の上に構築されていますので、PHPUnitのドキュメント を通読して、まずは、ユニットテストの書き方に関する基本的な理解を得ることをお奨めします。 以下に、Yii におけるユニットテストの書き方に関する基本的な原則を要約します。

以下においては、主として、アクティブレコード モデルクラスのためのユニットテストを書く方法を説明します。 テストのクラスは CDbTestCase を継承したものにします。 というのは、CDbTestCase は前の章で紹介した、データベースフィクスチャのサポートを提供するからです。

ブログデモ の中の Comment モデルクラスをテストしたいと仮定しましょう。 最初に CommentTest という名前のクラスを作成して、protected/tests/unit/CommentTest.php として保存します。



このクラスの中で、fixtures というメンバ変数を配列として定義し、このテストでどのフィクスチャが使用されるかを指定します。 配列は、フィクスチャの名前に対するモデルクラス名またはフィクスチャテーブル名 (例えば、posts というフィクスチャ名に対する Post というモデルクラス) という対応関係を表します。 フィクスチャテーブル名に対応付けるときは、テーブル名の前にコロンを付ける (例えば :Post) 必要があることに注意して下さい。 そして、モデルクラス名を使う場合は、モデルに対応するテーブルがフィクスチャテーブルであると見なされます。 前に述べたように、フィクスチャテーブルはテストメソッドが実行されるたびに、毎回、一定の既知の状態にリセットされます。

フィクスチャ名を使うと、テストメソッドの中で簡単にフィクスチャデータにアクセスすることが出来ます。 下記のコードがフィクスチャ名の典型的な使用例です。



注意: テーブル名を使ってフィクスチャを宣言した場合 (例えば 'posts'=>':Post') は、上の三番目の用法はエラーになります。 なぜなら、テーブルがどんなモデルクラスに関連付けられているかについての情報が無いからです。

次に、Comment モデルクラスの approve メソッドをテストするための testApprove メソッドを書きます。 コードは非常に単純です。 最初に保留状態のコメントをインサートします。 次にこのコメントをデータベースから参照して、保留の状態にあることを確認します。最後に approve メソッドを呼んで、期待通りに状態が変化していることを確認します。



$Id$