Настройка PHPUnit с Zend Test

Я пытаюсь начать использовать PHPUnit с Zend Test для моего приложения Zend Framework. Я могу запустить команду PHPUnit из командной строки phpunit --configuration phpunit.xml . Я пробовал следовать этому руководству, основанному на блоге Мэтью Вейера О'Пинни. Я получаю сообщение об ошибке, когда PHPUnit пытается записать файл журнала. Вот мой phpunit.xml

 <phpunit bootstrap="./Bootstrap.php" colors="true"> <testsuite name="Zend Framework Tests"> <directory>./</directory> </testsuite> <!-- Optional filtering and logging settings --> <filter> <whitelist> <directory suffix=".php">../library/</directory> <directory suffix=".php">../application/</directory> <exclude> <directory suffix=".phtml">../application/</directory> </exclude> </whitelist> </filter> <logging> <log type="coverage-html" target="./log/report" charset="UTF-8" yui="true" highlight="true" lowUpperBound="50" highLowerBound="80"/> <log type="testdox-html" target="./log/testdox.html"/> </logging> </phpunit> 

Мой тестовый бутстрап:

 <?php //Set app paths and environment define('BASE_PATH', realpath(dirname(__FILE__) . '/../')); define('APPLICATION_PATH', BASE_PATH . '/application'); define('TEST_PATH', BASE_PATH . '/tests'); define('APPLICATION_ENV', 'testing'); //Set include path set_include_path('.' . PATH_SEPARATOR . BASE_PATH . '/library' . PATH_SEPARATOR . get_include_path()); //Set the default timezone date_default_timezone_set('America/Chicago'); ?> 

И мой ControllerTestCase, который я бы хотел, чтобы мои тестовые контроллеры расширялись:

 <?php require_once 'Zend/Application.php'; require_once 'Zend/Test/PHPUnit/ControllerTestCase.php'; abstract class ControllerTestCase extends Zend_Test_PHPUnit_ControllerTestCase { public $_application; public function setUp() { //Override the parent to solve an issue with not finding the correct module $this->bootstrap = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini' ); parent::setUp(); } } ?> 

Ошибка, которую я получаю, когда PHPUnit пытается записать файл журнала: Fatal error: Class 'Symfony\Component\Console\Command\Command' not found in C:\repositories\myfirstzend.com\includes\library\Doctrine\DBAL\Tools\Console\Command\ImportCommand.php on line 38

Какие-нибудь подсказки о том, что я делаю неправильно? Я на PHP 5.4, Windows 7, XAMPP 8.0, Pear обновлен, и у меня есть последний PHPUnit.

Обновление Если я изменю свой Bootstrap.php на следующий из блога Мэтью Вейера О'Пинни:

 <?php /* * Start output buffering */ ob_start(); /* * Set error reporting to the level to which code must comply. */ error_reporting( E_ALL | E_STRICT ); /* * Set default timezone */ date_default_timezone_set('GMT'); /* * Testing environment */ define('APPLICATION_ENV', 'testing'); /* * Determine the root, library, tests, and models directories */ $root = realpath(dirname(__FILE__) . '/../'); $library = $root . '/library'; $tests = $root . '/tests'; $models = $root . '/application/models'; $controllers = $root . '/application/controllers'; /* * Prepend the library/, tests/, and models/ directories to the * include_path. This allows the tests to run out of the box. */ $path = array( $models, $library, $tests, get_include_path() ); set_include_path(implode(PATH_SEPARATOR, $path)); /** * Register autoloader */ require_once 'Zend/Loader.php'; Zend_Loader::registerAutoload(); /** * Store application root in registry */ Zend_Registry::set('testRoot', $root); Zend_Registry::set('testBootstrap', $root . '/application/bootstrap.php'); /* * Unset global variables that are no longer needed. */ unset($root, $library, $models, $controllers, $tests, $path); 

Я продолжаю получать сообщение об Symfony от Doctrine. Я гарантировал, что я установил pear.symfony.com/Yaml. Так что все еще сломан.

Если я удалю ссылку Doctrine из моего приложения app.ini для приложения, которое я тестирую (это означает, что он не загружается), я все равно получаю ошибку. Похоже, что загрузчики для каждой из трех частей (PHPUnit, ZF, Doctrine) сражаются друг с другом. Есть ли способ обойти это?

Второе обновление: я понизил PHPUnit до 3.4.15, и у меня все еще есть эта проблема. Мой следующий шаг – перейти от PHP 5.4 до 5.3.x.

Третье обновление: теперь я на PHP 5.3.10 и вижу ту же ошибку.

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

    Мне не хватает загрузки приложения в ваш загрузочный файл.

     require_once 'Zend/Loader/Autoloader.php'; Zend_Loader_Autoloader::getInstance(); 

    Чтобы дать вам представление о том, что у меня есть в моих тестах / bootstrap.php (это автоматически сгенерировано с помощью инструмента zend с момента выпуска-1.11.4)

     <?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(); 

    Как упоминалось в руководстве Zend Framework, лучше всего использовать PHPUnit 3.4.15, хотя я мог бы запускать свои тесты с использованием PHPUnit 3.6.12, поскольку я изолирую свои тесты, чтобы сосредоточиться на своей бизнес-логике, а не на логике Zend Framework.

    Я также модифицировал свой phpunit.xml следующим образом:

     <phpunit bootstrap="./bootstrap.php" colors="true"> <testsuite name="Application Test Suite"> <directory>./application</directory> </testsuite> <testsuite name="Library Test Suite"> <directory>./library</directory> </testsuite> <filter> <whitelist> <directory suffix=".php">../../library</directory> <directory suffix=".php">../../application</directory> <exclude> <directory suffix=".php">../../library/Zend</directory> </exclude> </whitelist> </filter> </phpunit> 

    Надеюсь, это решает многие ваши проблемы, с которыми вы столкнулись сейчас.

    С наилучшими пожеланиями,

    Микеланджело