ZF-Autoloader not working in UnitTests on Ubuntu

Posted by Sam on Stack Overflow See other posts from Stack Overflow or by Sam
Published on 2012-07-03T06:46:22Z Indexed on 2012/07/03 15:16 UTC
Read the original article Hit count: 233

i got a problem regarding Unit-testing a Zend-Framework application under Ubuntu 12.04. The project-structure is a default zend application whereas the models are defined as the following

./application
  ./models
    ./DbTable
      ./ProjectStatus.php (Application_Model_DbTable_ProjectStatus)
    ./Mappers
      ./ProjectStatus.php (Application_Model_Mapper_ProjectStatus)
    ./ProjectStatus.php   (Application_Model_ProjectStatus)

The Problem here is with the Zend-specific autoloading. The naming convention here appears that the folder Mappers loads all classes with _Mapper but not _Mappers. This is some internal Zend behavior which is fine so far.

On my windows machine the phpunit runs without any Problems, trying to initiate all those classes.

On my Ubuntu machine however with jenkins running on it, phpunit fails to find the appropriate classes giving me the following error

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

The error appears to really be that the Zend-Autoloader doesn't load from the ubuntu machine, but i can't figure out how or why this works. The question remains of why this is. I think i've double checked every point of contact with the zend autoloading stuff, but i just can't figure this out. I'll paste the - from my point of view relevant snippets - and hope someone of you has any insight to this.

Jenkins Snippet for 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();

Any help will be appreciated.

© Stack Overflow or respective owner

Related posts about zend-framework

Related posts about phpunit