2009-03-17 3 views
4

Zend_Testのセットアップに成功した人はいますか?あなたの方法/アプローチは何でしたか、テスト/テストスイートはどのように実行しましたか?Zend Framework:Zend_Testの使い方

私はすでにPHPUnitをインストールして動作させています。今、私は単純なコントローラテストを書こうとしています。 Zend Frameworkのドキュメントでは、オートロードがセットアップされていると仮定していますが、これはまだ行っていません。どのような方法を行うあなたはを使って適切なファイルを自動読み込みしますか?私は通常のブートストラップファイルでそうしますが、たくさんのインクルードとセットアップパスでテストを混乱させたくありません。抽象的なコントローラのテストケースクラスは、行く方法でしょうか?

ドキュメントのようなブートストラップ・プラグインは、テストをどのようにブートストラップするのでしょうか、それとも別の方法でやりたいのですか?できるだけ多くの通常のブートストラップファイルを再利用したいと思います。テストと通常の使用のために私のブートストラップをどのようにDRYしなければなりませんか?

ここでは私のテストでは、これまでのところです:

<?php 

class IndexControllerTest extends Zend_Test_PHPUnit_ControllerTestCase 
{ 
    public function setUp() 
    { 
     $this->bootstrap = array($this, 'appBootstrap'); 
     parent::setUp(); 
    } 

    public function appBootstrap() 
    { 
     $this->frontController->registerPlugin(new Bootstrapper('testing')); 
    } 

    public function testIndexAction() 
    { 
     $this->dispatch('/index'); 
      $this->assertController('index'); 
      $this->assertAction('index'); 
    } 

} 

//straight from the documentation 
class Bootstrapper extends Zend_Controller_Plugin_Abstract 
{ 
    /** 
    * @var Zend_Config 
    */ 
    protected static $_config; 

    /** 
    * @var string Current environment 
    */ 
    protected $_env; 

    /** 
    * @var Zend_Controller_Front 
    */ 
    protected $_front; 

    /** 
    * @var string Path to application root 
    */ 
    protected $_root; 

    /** 
    * Constructor 
    * 
    * Initialize environment, root path, and configuration. 
    * 
    * @param string $env 
    * @param string|null $root 
    * @return void 
    */ 
    public function __construct($env, $root = null) 
    { 
     $this->_setEnv($env); 
     if (null === $root) { 
      $root = realpath(dirname(__FILE__) . '/../../../'); 
     } 
     $this->_root = $root; 

     $this->initPhpConfig(); 

     $this->_front = Zend_Controller_Front::getInstance(); 
    } 

    /** 
    * Route startup 
    * 
    * @return void 
    */ 
    public function routeStartup(Zend_Controller_Request_Abstract $request) 
    { 
     $this->initDb(); 
     $this->initHelpers(); 
     $this->initView(); 
     $this->initPlugins(); 
     $this->initRoutes(); 
     $this->initControllers(); 
    } 

    // definition of methods would follow... 
} 

私は何をすべきでしょうか?

答えて

3

は、ここで私はそれを動作させるためにやったことだ:

まず、我々はオートローディング問題を解決する必要があります。すべてのテストに含まれるファイルを作成し、testsディレクトリに配置します。注:私はかなり私の/public/index.phpからこれをすべてコピーしました。

# /tests/loader.php 

<?php 

define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application/')); 

set_include_path(APPLICATION_PATH . '/../library' . PATH_SEPARATOR . 
        APPLICATION_PATH . '/models' . PATH_SEPARATOR . 
        APPLICATION_PATH . '/forms' . PATH_SEPARATOR . 
        get_include_path()); 

require_once "Zend/Loader.php"; 
Zend_Loader::registerAutoload(); 

次に、このファイルをテストに含める必要があります。テストファイルは/ tests/application/controllers /にあります。ブートストラップファイルはQuickStart tutorialと同じ方法で動作するため、私はプラグインとしてブートストラップを使用しません。場所をパブリック$ブートストラップとして設定することによって、その場所にリンクするだけです。 Zend_Test_PHPUnit_ControllerTestCaseが構築されると、ここで設定したブートストラップファイルが検索されます。

<?php 

require_once '../../loader.php'; 

class IndexControllerTest extends Zend_Test_PHPUnit_ControllerTestCase 
{ 
    public $bootstrap = '../../../application/bootstrap.php'; 

    public function testIndexAction() 
    { 
     $this->dispatch('/index'); 
     $this->assertController('index'); 
     $this->assertAction('index'); 
    } 

} 

そして、それはそれです!私のブートストラップファイルが既にプラグインであった場合、これはもう少し複雑かもしれませんが、そうではないので、とても簡単です。代わりに()

require_once 'Zend/Loader/Autoloader.php'; 
Zend_Loader_Autoloader::getInstance(); 

registerAutoLoadにそれを

require_once "Zend/Loader.php"; 
Zend_Loader::registerAutoload(); 

変化を用いる

0

私はいつも基本的な初期化作業を行う簡単なTestHelper.phpを使用します。このファイルはすべてのテストケースファイルに含まれています。私がやることの1つは、特にフィルター、バリデーター、フォームを使用するときに大きな依存関係の問題が発生したため、Zend Frameworkオートローダーを登録することです。すべての必要なファイルを追跡し、テストケースに手動で含めることはほとんど不可能です。

自動ロードの初期化とインクルードパスの設定をブートストラッププラグインに移すことができます。この手順は実際のアプリケーションで同じにする必要があります。

1

は、のように廃止され1.8.0

関連する問題