Stagehand_Testrunner で Session エラー が出た(解決済み)

以前書いた PHPUnit と Stagehand_Testrunner を使った場合、セッション関連のエラーが出る件に付いて、Stagehand_Testrunner の作者の久保さん(@iteman)より Twitter でレスを頂いた。

itemanこれって不具合っていう形で握りつぶしていいのかな。setUp()で明示的に記述するなり、テストコードかプロダクトコード側で @ 付ける方がいいと思う ( 2009-09-19 17:58:08 )

との事なので、Stagehand_Testrunner を使って Session already start とかのエラーが出たら、先頭でセッション開始すればエラーにならずに期待通り動く。

追記 2009/09/20

Twitter で以下のようなアドバイスを頂いた。

iteman@heavenshell Zend Framework 1.8.0 のソースを見てみました。Zend_Session を使ったテストの際には setup() で ( 2009-09-20 11:03:19 )
iteman@heavenshell Zend_Session::$_unitTestEnabled = true; とするのが流儀なのかなと思いました ( 2009-09-20 11:04:02 )
iteman@heavenshell 単に無視するよりはこのように意図を示す形が望ましいと考えています ( 2009-09-20 11:04:58 )

<?php
require_once 'Zend/Loader/Autoloader.php';
$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->setFallbackAutoloader(true)
           ->suppressNotFoundWarnings(false);
//Zend_Session::start(true);
Zend_Session::$_unitTestEnabled = true;

Stagehand_Testrunner が最初に読み込むファイルに上記の様に記述してやれば、セッションを開始せずとも行けた。
前ためした時にダメだったんだけど、多分自分の書き方が悪かったんだろう。どこにどう書いたか覚えてない orz
久保さんありがとうございます!!

追記 2009/09/20 12:01

prepare.php に書かなくても、アドバイス通り setUp() に書けばいける orz
因にテストコードの setUp はこんな感じ。

<?php
public function setUp()
{   
    Zend_Session::$_unitTestEnabled = true;
    $options = array(                
        'env'      => 'testing',     
        'resource' => array('Config', 'Path', 'Db')
    );

    $path = GENE_APP_PATH;
    Gene::app($path, $options);
}

Zend_Application のブートストラップを呼び出せばすっきり出来る。