Я часами искал ответ на эту проблему в Google и на других сайтах, но безуспешно.Я создал несколько модульных тестов для своего проекта Zend Framework, используя PHPUnit.Все идет хорошо с тестами вплоть до момента отчета о покрытии кода PHPUnit.В этот момент я получаю следующую ошибку:
Создание отчета о покрытии кода, это может занять некоторое время.Неустранимая ошибка: вызов функции-члена pushStack () для необъекта в C: \ htdocs \ ZendFWTutorials \ ZendStorefront \ library \ SF \ Plugin \ Action.php в строке 32
Эта ошибка ссылается наследующий блок кода:
public function
dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
{
$stack = $this->getStack();
// category menu
$categoryRequest = new Zend_Controller_Request_Simple();
$categoryRequest->setControllerName('category')
->setActionName('index')
->setParam('responseSegment', 'categoryMain');
// push requests into the stack
$stack->pushStack($categoryRequest);
}
public function getStack()
{
if (null === $this->_stack) {
$front = Zend_Controller_Front::getInstance();
if (!$front->hasPlugin('Zend_Controller_Plugin_ActionStack'))
{
$stack = new Zend_Controller_Plugin_ActionStack();
$front->registerPlugin($stack);
} else {
$stack = $front->getPlugin('ActionStack');
}
$this->_stack = $stack;
}
return $this->_stack;
}
Этот код взят из библиотеки, которую я не писал, так что, вероятно, это усложнит мою проблему, потому что у меня меньше шансов понять, что происходит.Я также не знаю, что делает логика PHPUnit при создании отчета о покрытии кода, поэтому я не знаю, как устранить проблему.Эта проблема возникает, только когда я запускаю PHPUnit и запускаю xdebug для отслеживания кода в этой функции при нормальных условиях работы.У меня такое ощущение, что PHPUnit входит в условие, когда переменная имеет значение null, но в обычной работе $ stack и $ categoryRequest не равны null.
Моя структура каталогов выглядит следующим образом:
application-----> самозагрузки-----> конфигурации-----> макеты-----> модули--------> витрина--------------> Контроллеры--------------> формы--------------> модели--------------> Услуги--------------> просмотрыстроитьданныебиблиотека-----> SF-----> Zendобщественного-----> CSS-----> Изображениятесты-----> Приложение-------------> модули-------------> Контроллеры-------------> модели---- TestHelper.php---- phpunit.xml
phpunit.xml выглядит следующим образом:
./application/
<filter>
<whitelist>
<directory suffix=".php">../application/</directory>
<exclude>
<directory suffix=".phtml">../application/</directory>
<directory suffix=".php">../library/</directory>
</exclude>
</whitelist>
</filter>
<logging>
<log type="coverage-html" target="./log/report" charset="UTF-8"
yui="true" highlight="true" lowUpperBound="50"
highLowerBound = "80" />
TestHelper.php:
<?php // set our app paths and
environments define('BASE_PATH',
realpath(dirname(__FILE__) . '/../'));
define('APPLICATION_PATH', BASE_PATH .
'/application'); define('TEST_PATH',
BASE_PATH . '/tests');
define('APPLICATION_ENV', 'testing');
//include path set_include_path('.' .
PATH_SEPARATOR . BASE_PATH .
'/library' . PATH_SEPARATOR .
get_include_path());
// set the default timezone
date_default_timezone_set('America/Argentina/Buenos_Aires');
require_once 'Zend/Application.php';
$application = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH . '/config/store.ini');
$application->bootstrap();