2011-06-16 33 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