Ich habe stundenlang in Google und auf verschiedenen anderen Websites nach einer Antwort auf dieses Problem gesucht - ohne Erfolg. Ich habe einige Unit-Tests für mein Zend Framework-Projekt mit PHPUnit erstellt. Alles geht gut mit den Tests bis zu dem Punkt der PHPUnit Code Coverage Bericht. An diesem Punkt erhalte ich den folgenden Fehler:
Generierung des Codeabdeckungsberichts, dies kann einen Moment dauern. Fataler Fehler: Aufruf zu einer Memberfunktion pushStack() auf einem Nicht-Objekt in C:\htdocs\ZendFWTutorials\ZendStorefront\library\SF\Plugin\Action.php in Zeile 32
Dieser Fehler bezieht sich auf den folgenden Codeblock:
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;
}
Dieser Code stammt aus einer Bibliothek, die ich nicht geschrieben habe, was mein Problem wahrscheinlich noch komplizierter macht, weil ich nicht so leicht verstehe, was da vor sich geht. Ich weiß auch nicht, was die PHPUnit-Logik macht, wenn sie den Codeabdeckungsbericht erstellt, also weiß ich nicht, wie ich das Problem beheben kann. Das Problem tritt nur auf, wenn ich PHPUnit ausführe und ich habe xdebug ausgeführt, um den Code in dieser Funktion unter normalen Betriebsbedingungen zu verfolgen. Ich habe das Gefühl, dass PHPUnit eine Bedingung eingibt, bei der die Variable null ist, aber im normalen Betrieb sind $stack und $categoryRequest nicht null.
Meine Verzeichnisstruktur ist wie folgt:
Anmeldung
----->bootstrap
----->config
----->Layouts
----->Module
-------->Schaufenster
-------------->controllers
-------------->forms
-------------->models
-------------->services
-------------->ansichten
bauen
Daten
Bibliothek
----->SF
----->Zend
Öffentlich
----->css
----->Bilder
Tests
----->Bewerbung
------------->modules
------------->controllers
------------->Modelle
----TestHelper.php
----phpunit.xml
phpunit.xml sieht folgendermaßen aus:
./anwendung/
<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();