我在Ubuntu 12.04下的单元测试Zend-Framework应用程序时遇到了问题。该项目的结构,而模型定义为以下ZF-Autoloader在Ubuntu上的UnitTests中不起作用
./application
./models
./DbTable
./ProjectStatus.php (Application_Model_DbTable_ProjectStatus)
./Mappers
./ProjectStatus.php (Application_Model_Mapper_ProjectStatus)
./ProjectStatus.php (Application_Model_ProjectStatus)
这里的问题是与特定的Zend - 自动加载默认的Zend的应用程序。命名约定在这里出现,文件夹映射器加载所有类_Mapper但不是_Mappers。这是迄今为止的一些内部Zend行为。
在我的Windows机器上,phpunit运行时没有任何问题,试图启动所有这些类。
在我的Ubuntu机器但是与其上运行詹金斯,PHPUnit的未能找到合适的课程给我下面的错误出现
Fatal error: Class 'Application_Model_Mapper_ProjectStatus' not found
in /var/lib/jenkins/jobs/PAM/workspace/tests/application/models/Mapper/ProjectStatusTest.php
on line 39
的错误真的是在Zend - 自动加载不从加载Ubuntu的机器,但我不知道如何或为什么这个工程。问题仍然存在,为什么这是。我想我已经仔细检查了与zend自动加载的东西的每一个接触点,但我无法弄清楚这一点。我会粘贴 - 从我的观点来看相关的片段 - 并希望你们中的任何人对此有所了解。
詹金斯片段为PHPUnit的
<target name="phpunit" description="Run unit tests with PHPUnit">
<exec executable="phpunit" failonerror="true">
<arg line="--configuration '${basedir}/tests/phpunit.xml' --coverage-clover '${basedir}/build/logs/clover.xml' --coverage-html '${basedir}/build/coverage/.' --log-junit '${basedir}/build/logs/junit.xml'" />
</exec>
</target>
./tests/phpunit.xml
<phpunit bootstrap="./bootstrap.php">
... this shouldn't be of relevance ...
</phpunit>
./tests/bootstrap.php
<?php
// Define path to application directory
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'testing'));
// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../library'),
get_include_path(),
)));
require_once 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance();
任何帮助将不胜感激。
这就是它归结到的。 Windows是的,Unix没有应该让我直接不区分大小写......感谢您指出这一点。不,应用程序不需要在我的情况下引导。对于测试模型,不需要引导应用程序,自动加载器就足够了。对于测试控制器,我在测试之前引导应用程序以准备好干净的“孤独”应用程序。 **再次感谢!** – Sam