5 Stimmen

Zend_Loader Vs Autoloader mit Zend_Test und PHPUnit

Ich richte Tests mit PHPUnit und dem Zend Framework ein und habe ein lästiges Problem mit dem Autoloading.

Zunächst bin ich mir nicht sicher, warum ich das Autoloading in meiner phpunit bootstrap.php einrichten muss. In der Produktionsumgebung lädt die index.php-Datei es nicht? (Meine Testfälle erweitern Zend_Test_PHPUnit_ControllerTestCase).

Zweitens habe ich Schwierigkeiten, Zend_Loader durch Zend_Loader_Autoload zu ersetzen.

Wenn ich diesen Code in meinem Bootstrap verwende...

require_once "Zend/Loader.php";
Zend_Loader::registerAutoload();

... laufen die Tests gut, aber mit einer Warnung, dass Zend_Loader veraltet ist.

Verwende ich jedoch diesen Code...

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

finden die Tests eine Bibliotheksklasse nicht und es kommt zu einem schwerwiegenden Fehler.

In meiner application.ini habe ich die Zeile autoloaderNamespaces[] = "CP_". Es scheint, dass die Loader-Klasse es sehen kann, aber nicht die Autoloader-Klasse. Seltsam...

Irgendwelche Ideen?

Danke!

5voto

Tom Jowitt Punkte 6344

PHPUnit verwendet manchmal die cli/php.ini-Konfiguration anstelle der Standardkonfiguration. Hier könnte das Problem entstehen, da Sie möglicherweise Bibliothek-Include-Pfade zu Ihrer php.ini hinzugefügt haben, aber versäumt haben, sie zur cli/php.ini hinzuzufügen.

Ich füge meine Bibliotheken im Test-Bootstrap manuell hinzu, anstatt sie über die ini-Datei einzubinden. Sie könnten versuchen, etwas Ähnliches wie dies unter Ihren Autoloader-Zeilen im Bootstrap hinzuzufügen:

$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
    'basePath' => APPLICATION_PATH,
    'namespace' => '',
    'resourceTypes' => array(
        'cplib' => array(
            'path' => 'library/CP',
            'namespace' => 'CP_'
        ),
    ),
));

1 Stimmen

Vielen Dank tomjowitt. Ich habe es geschafft, es mit autoLoader->registerNamespace('CP_') in meinem Bootstrap zu lösen. Deine Antwort hat mich auf den richtigen Weg gebracht, insbesondere der Punkt, an der PHPUnit die CLI verwendet, nicht Apache.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X