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