テストケースの起動
Login
サンプル で説明したように、すべての MVC
テストケースは
Zend_Test_PHPUnit_ControllerTestCase
を継承しなければなりません。このクラスは
PHPUnit_Framework_TestCase を継承しており、
PHPUnit が提供する仕組みやアサーションをすべて使用できます。
またそれに加えて、Zend Framework の
MVC 実装に特化した scaffold 機能やアサーションもあります。
MVC アプリケーションをテストするには、まずそれを起動する必要があります。
いくつかの方法がありますが、どの方法になるかは public プロパティ
$bootstrap で決まります。
まず、このプロパティでファイルを指定することができます。
そうすると、そのファイルはフロントコントローラをディスパッチせず、
単にフロントコントローラ (とアプリケーション固有の設定)
を準備するだけの役割となります。
2 番目の方法として、アプリケーションを起動するための
PHP コールバックを指定することができます。
この方法は Login サンプル
で使用しています。使用するコールバックが関数や static
メソッドである場合は、クラスレベルで設定することができます。
オブジェクトのインスタンスが必要な場合は、
setUp() メソッドを利用することを推奨します。
bootstrap = array($bootstrap, 'start');
parent::setUp();
}
}
]]>
parent::setUp(); に注目しましょう。
これは必須です。とうのも、Zend_Test_PHPUnit_Controller_TestCase
の setUp() メソッドが残りの起動処理
(コールバックの呼び出しも含む) を実行するからです。
通常、setUp() メソッドは次のようにアプリケーションを起動します。
まずクリーンな環境を読み込んでリクエストの状態を初期化し、
プラグインやヘルパーをすべてリセットし、
フロントコントローラをリセットして
リクエストオブジェクトとレスポンスオブジェクトを新しく作成します。
それが終わったら、$bootstrap
で指定したファイルを読み込むか、
あるいは指定したコールバックを呼び出します。
テストの起動処理は、可能な限りそのアプリケーションの起動処理と同じになるようにしています。
しかし、いくつかの制約もあります。
リクエストオブジェクトやレスポンスオブジェクトに独自実装を用意しても、
それが使われることはありません。
Zend_Test_PHPUnit_Controller_TestCase は、
独自のリクエストオブジェクトとレスポンスオブジェクト (それぞれ
Zend_Controller_Request_HttpTestCase および
Zend_Controller_Response_HttpTestCase)
を持っています。これらのオブジェクトには、
指定した方法でリクエスト環境を準備したり
指定した方法で人工的なレスポンスを返したりするメソッドが用意されています。
テストサーバに特定の設定を期待してはいけません。
言い換えると、テストの実行環境が特定のサーバ設定になっていることは保証されていないということです。
アプリケーション側から期待してもかまわないのは、
単にルータがリクエストをルーティングしてくれるということだけです。
サーバ固有のヘッダをリクエストオブジェクトに含めてはいけません。
アプリケーションが起動したら、
いよいよテストを作り始めることができます。