У меня возникла проблема с модулем тестирования приложения Zend-Framework в Ubuntu 12.04. Проект-структура является применением Зенда по умолчанию, тогда как модели определяются следующимZF-Autoloader не работает в UnitTests на Ubuntu
./application
./models
./DbTable
./ProjectStatus.php (Application_Model_DbTable_ProjectStatus)
./Mappers
./ProjectStatus.php (Application_Model_Mapper_ProjectStatus)
./ProjectStatus.php (Application_Model_ProjectStatus)
Проблемы здесь с Zend специфичной автозагрузкой. Соглашение об именах здесь показывает, что папка Mappers загружает все классы с помощью _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
ошибки, чтобы быть действительно что Зенд-автозагрузчик не загружается из машина ubuntu, но я не могу понять, как и почему это работает. Остается вопрос, почему это так. Я думаю, что я дважды проверял каждую точку контакта с автозагрузкой zend, но я просто не могу понять это. Я вложу - с моей точки зрения соответствующие фрагменты - и надеюсь, что у кого-то из вас есть понимание этого.
Дженкинс Сниппет для РНРипхЬ
<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