Ubuntu12.04でのZend-Frameworkアプリケーションの単体テストに関して問題が発生しました。プロジェクト構造はデフォルトのzendアプリケーションですが、モデルは次のように定義されています。
./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は問題なく実行され、これらすべてのクラスを開始しようとします。
ただし、jenkinsが実行されている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-Autoloaderがubuntuマシンからロードされないことであるように見えますが、これがどのように、またはなぜ機能するのか理解できません。これがなぜなのかという疑問が残ります。zend autoloadingのものとのすべての接点を再確認したと思いますが、これを理解することはできません。-私の観点からは関連するスニペットを貼り付けます-そしてあなたの誰かがこれについて何か洞察を持っていることを願っています。
PHPUnit用のJenkinsスニペット
<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();
どんな助けでもありがたいです。