2011-06-16 35 views
5

我正在設置PHPUnit和Zend框架的測試,並有自動加載一個小問題。Zend_Loader Vs自動加載器與Zend_Test和PHPUnit

首先,我不確定爲什麼我需要在我的phpunit bootstrap.php中設置自動加載。在生產環境中,index.php文件沒有加載它? (我的測試用例擴展了Zend_Test_PHPUnit_ControllerTestCase)。

其次,我很難用Zend_Loader_Autoload替換Zend_Loader。

如果我在引導使用此代碼...

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

...測試運行正常,但有大約那麼Zend_Loader警告被棄用。

如果我用這個代碼,但是...

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

測試無法找到庫類和一個致命的錯誤。

在我的application.ini中我有行autoloaderNamespaces [] =「CP_」。似乎Loader類可以看到它,但不是Autoloader類。好奇...

任何想法?

謝謝!

回答

5

PHPUnit有時使用cli/php.ini配置而不是默認配置。這可能是你的問題起源的地方,因爲你可能已經添加了庫包含你的php.ini的路徑,但忽略將它們添加到cli/php.ini。

我將我的庫手動添加到測試引導程序,而不是通過ini文件。你可以嘗試在你的自動加載程序行中加入類似下面的內容:

$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
    'basePath' => APPLICATION_PATH, 
    'namespace' => '', 
    'resourceTypes' => array(
     'cplib' => array(
      'path' => 'library/CP', 
      'namespace' => 'CP_' 
     ), 
    ), 
)); 
+1

謝謝tomjowitt。我設法在自舉程序中用autoLoader-> registerNamespace('CP_')進行分類。你的回答讓我走上了正軌,特別是使用CLI而不是Apache的PHPUnit。 – 2011-06-16 23:21:08