2011-11-13 9 views
1

J'essaie de connaître les tests unitaires dans Zend Framework. J'ai installé PHPunit (pas sans quelques problèmes en cours de route).Configuration du framework Zend pour PHPunit

J'ai aussi créé un squelette simple, Zend/Doctrine 2 qui fonctionne très bien et écrit avec succès à la DB, etc.

Je veux juste commencer à utiliser et à comprendre PHPUnit, mais il donne des erreurs étranges. J'ai un IndexController vide qui ne fait absolument rien. Je veux juste affirmer que cela existe. PHPunit jette une énorme liste d'erreurs liées au Bootstrap, mais le bootstrap fonctionne parfaitement en pratique. C'est comme si phpunit ne respectait pas mes chemins d'inclusion.

ps. Si vous avez déjà lu ce post, j'ai simplifié le projet squelette et modifié le code et les erreurs ci-dessous pour refléter cela. J'espère que cela facilitera le débogage.

Je pense que du code de mon aide à expliquer:

[email protected]:/var/www/z2d2/tests$ phpunit --version 
PHPUnit 3.6.3 by Sebastian Bergmann. 


<?php 
require_once 'Zend/Application.php'; 
require_once 'Zend/Test/PHPUnit/ControllerTestCase.php'; 

abstract class ControllerTestCase extends Zend_Test_PHPUnit_ControllerTestCase 
{ 

    public function setUp() 
    { 

     $this->bootstrap = new Zend_Application(
     'development', 
     APPLICATION_PATH . '/configs/application.ini' 
    ); 

     parent::setUp(); 
    } 

    public function tearDown() 
    { 
     parent::tearDown(); 
    } 

} 


<?php 

class IndexControllerTest extends ControllerTestCase 
{ 

    public function testDoesHomePageExist() 
    { 
     $this->dispatch('/'); 
     $this->assertController('index'); 
     $this->assertAction('index'); 

    } 

} 

Ceci est mon simple, bootstrap:

<?php 

    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
    { 

     /** 
     * 
     * 
     * 
     * 
     */ 
     protected function _initConfig() 
     { 

     $config = new Zend_Config($this->getOptions()); 
     Zend_Registry::set('config', $config); 

     } 

     /** 
     * 
     * 
     * 
     * 
     */ 
     protected function _initDoctrine() { 

     require_once('Doctrine/Common/ClassLoader.php'); 

     $autoloader = Zend_Loader_Autoloader::getInstance(); 
     $classLoader = new \Doctrine\Common\ClassLoader('Entities', 
      realpath(Zend_Registry::get('config')->resources->entityManager->connection->entities), 'loadClass'); 

     $autoloader->pushAutoloader(array($classLoader, 'loadClass'), 'Entities'); 

     $classLoader = new \Doctrine\Common\ClassLoader('Repositories', 
      realpath(Zend_Registry::get('config')->resources->entityManager->connection->entities), 'loadClass'); 

     $autoloader->pushAutoloader(array($classLoader, 'loadClass'), 'Repositories');  

     } 

    } 

Et maintenant les erreurs (Désolé pour la longueur de celui-ci):

[email protected]:/var/www/z2d2/tests$ phpunit 
PHPUnit 3.5.15 by Sebastian Bergmann. 

PHP Fatal error: Bootstrap::_initDoctrine(): Failed opening required 'Doctrine/Common/ClassLoader.php' (include_path='/var/www/z2d2/application/../views:.:/usr/share/php:/usr/share/php/:/usr/local/share/php/library') in /var/www/z2d2/application/Bootstrap.php on line 28 
PHP Stack trace: 
PHP 1. {main}() /usr/bin/phpunit:0 
PHP 2. PHPUnit_TextUI_Command::main() /usr/bin/phpunit:49 
PHP 3. PHPUnit_TextUI_Command->run() /usr/share/php/PHPUnit/TextUI/Command.php:129 
PHP 4. PHPUnit_TextUI_TestRunner->doRun() /usr/share/php/PHPUnit/TextUI/Command.php:188 
PHP 5. PHPUnit_Framework_TestSuite->run() /usr/share/php/PHPUnit/TextUI/TestRunner.php:305 
PHP 6. PHPUnit_Framework_TestSuite->run() /usr/share/php/PHPUnit/Framework/TestSuite.php:693 
PHP 7. PHPUnit_Framework_TestSuite->runTest() /usr/share/php/PHPUnit/Framework/TestSuite.php:733 
PHP 8. PHPUnit_Framework_TestCase->run() /usr/share/php/PHPUnit/Framework/TestSuite.php:757 
PHP 9. PHPUnit_Framework_TestResult->run() /usr/share/php/PHPUnit/Framework/TestCase.php:576 
PHP 10. PHPUnit_Framework_TestCase->runBare() /usr/share/php/PHPUnit/Framework/TestResult.php:666 
PHP 11. ModelTestCase->setUp() /usr/share/php/PHPUnit/Framework/TestCase.php:626 
PHP 12. Zend_Application->bootstrap() /var/www/z2d2/tests/application/models/ModelTestCase.php:16 
PHP 13. Zend_Application_Bootstrap_BootstrapAbstract->bootstrap() /usr/local/share/php/library/Zend/Application.php:355 
PHP 14. Zend_Application_Bootstrap_BootstrapAbstract->_bootstrap() /usr/local/share/php/library/Zend/Application/Bootstrap/BootstrapAbstract.php:586 
PHP 15. Zend_Application_Bootstrap_BootstrapAbstract->_executeResource() /usr/local/share/php/library/Zend/Application/Bootstrap/BootstrapAbstract.php:622 
PHP 16. Bootstrap->_initDoctrine() /usr/local/share/php/library/Zend/Application/Bootstrap/BootstrapAbstract.php:669 

Fatal error: Bootstrap::_initDoctrine(): Failed opening required 'Doctrine/Common/ClassLoader.php' (include_path='/var/www/z2d2/application/../views:.:/usr/share/php:/usr/share/php/:/usr/local/share/php/library') in /var/www/z2d2/application/Bootstrap.php on line 28 

Call Stack: 
    0.0002  326940 1. {main}() /usr/bin/phpunit:0 
    0.0424  666604 2. PHPUnit_TextUI_Command::main() /usr/bin/phpunit:49 
    0.0424  667084 3. PHPUnit_TextUI_Command->run() /usr/share/php/PHPUnit/TextUI/Command.php:129 
    0.0924 4311848 4. PHPUnit_TextUI_TestRunner->doRun() /usr/share/php/PHPUnit/TextUI/Command.php:188 
    0.1036 4751832 5. PHPUnit_Framework_TestSuite->run() /usr/share/php/PHPUnit/TextUI/TestRunner.php:305 
    0.1037 4752248 6. PHPUnit_Framework_TestSuite->run() /usr/share/php/PHPUnit/Framework/TestSuite.php:693 
    0.1038 4752576 7. PHPUnit_Framework_TestSuite->runTest() /usr/share/php/PHPUnit/Framework/TestSuite.php:733 
    0.1038 4752576 8. PHPUnit_Framework_TestCase->run() /usr/share/php/PHPUnit/Framework/TestSuite.php:757 
    0.1040 4752576 9. PHPUnit_Framework_TestResult->run() /usr/share/php/PHPUnit/Framework/TestCase.php:576 
    0.2036 4787392 10. PHPUnit_Framework_TestCase->runBare() /usr/share/php/PHPUnit/Framework/TestResult.php:666 
    0.2082 4891936 11. ModelTestCase->setUp() /usr/share/php/PHPUnit/Framework/TestCase.php:626 
    0.2567 5678688 12. Zend_Application->bootstrap() /var/www/z2d2/tests/application/models/ModelTestCase.php:16 
    0.2568 5678732 13. Zend_Application_Bootstrap_BootstrapAbstract->bootstrap() /usr/local/share/php/library/Zend/Application.php:355 
    0.2569 5678732 14. Zend_Application_Bootstrap_BootstrapAbstract->_bootstrap() /usr/local/share/php/library/Zend/Application/Bootstrap/BootstrapAbstract.php:586 
    0.2609 5699280 15. Zend_Application_Bootstrap_BootstrapAbstract->_executeResource() /usr/local/share/php/library/Zend/Application/Bootstrap/BootstrapAbstract.php:622 
    0.2610 5699472 16. Bootstrap->_initDoctrine() /usr/local/share/php/library/Zend/Application/Bootstrap/BootstrapAbstract.php:669 

Quelqu'un peut-il me montrer où je vais mal? Je soupçonne même que mon PHPunit n'est pas configuré correctement

+0

Il semble y avoir quelque chose qui cloche avec l'autochargeur mais je ne peux pas le voir si vite. Aussi Zend Framework 1.x n'est malheureusement pas compatible avec PHPUnit 3.6.x mais cela ne cause pas ce problème en premier lieu mais il casse votre script de toute façon plus tard. –

+0

Merci - Je pense que quelque chose s'est mal passé avec l'installation. Devrais-je essayer de désinstaller? Avez-vous des suggestions sur la façon dont je devrais désinstaller - par exemple. si PEAR ou le gestionnaire de paquets? Quelle version recommanderiez-vous d'installer avec zend 1.x? – dimbo

+0

Je ne pense pas que votre problème dans ce sujet est l'installation, mais après avoir résolu ce problème, vous allez marcher dans ce problème de version phpunit. Installer une ancienne version est un peu difficile mais vous devez d'abord supprimer phpunit 3.6 avec toutes les dépendances. Ensuite, vous pouvez installer phpunit en spécifiant le numéro de version comme: pear install phpunit/PHPUnit-3.5.14 avec toutes les dépendances. –

Répondre

3

Je l'ai résolu de cette façon: il semble que PHPunit n'aime pas les chemins d'inclusion relatifs dans le fichier d'amorçage de l'application principale - c'est ce qui cause le problème. Ainsi, dans le bootstrap de test pointé par phpunit.xml, assurez-vous de spécifier les chemins d'inclusion. J'ai ajouté ces lignes:

set_include_path(
    '.' 
    . PATH_SEPARATOR . BASE_PATH . '/library' 
    . PATH_SEPARATOR . get_include_path() 
); 
Questions connexes