IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend Framework PHP Discussion :

[Test Unitaire] Classe Zend_Db_Table not found


Sujet :

Zend Framework PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 63
    Par défaut [Test Unitaire] Autolaod + test unitaire ??
    Bonjour.

    J'essaye d'utiliser les test unitaires avec PHPUnit et ZendFramework. Cependant lorsque je veut tester mon fichier avec la commande

    >phpunit EntitesTest

    Le message suivant apparait :

    Fatal error: class 'Zend_Db_Table' not found in '.../entites.php' line 3.
    Je vous joint les fichiers en question :

    Mon fichier EntitesTest.php qui se situe dans MonApp/tests/application/models/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    <?php
     
    require_once 'PHPUnit/Framework/TestCase.php';
    require dirname(dirname(dirname(dirname(__FILE__)))).'\application\models\DbTable\Entites.php';
     
    class EntitesTest extends PHPUnit_Framework_TestCase
    {
     
        private $_entite;
     
        public function setUp()
        {
            $this->_entite = new Model_DbTable_Entites();
        }
     
        public function tearDown()
        {
            /* Tear Down Routine */
        }    
     
        public function testConstructeur()
        {
            $this->assertTrue(isset($this->_entite));
     
        }
     
        public function testCrud()
        {
            $nb1 = $this->_entite->fetchAll()->count();
            $this->_entite->ajouterEntite('xxxx');
            $nb2 = $this->_entite->fetchAll()->count();
            $this->assertTrue($nb2-$nb1=1);
            $id = $this->_entite->fetchAll('select Id_Entite from entite where Nom_Entite = \'xxxx\'');
            $obj = $this->_entite->getEntite($id);
            $this->assertTrue($obj[Nom_Entite]='xxxx');
            if(($this->assertEqual($obj[Nom_Entite],'xxxx'))==true){
                $this->_entite->editerEntite($id,'yyyy');
                $obj = $this->_entite->getEntite($id);
                $this->assertEqual($obj[Nom_Entite],'yyyy');
                $this->_entite->supprimerEntite($id);
                $nb3 = $this->_entite->fetchAll()->count();
                $this->assertEqual($nb1,$nb3);
            }
        }
    }
    Mon models entites.php qui se situe dans MonApp/application/models/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <?php
     
    class Model_DbTable_Entites extends Zend_Db_Table {
     
        protected $_name = 'entites';
     
        public function getEntite($id){
            $row = $this->fetchRow('Id_Entite = ' . (int)$id);
            if(!$row){
                throw new Exception("Ligne $id non trouvée");
            }
            return $row->toArray();
        }
     
        public function ajouterEntite($nom){
            $data = array('Nom_Entite' => $nom);
            $this->insert($data);
        }
     
        public function editerEntite($id, $nom){
            $data = array('Nom_Entite' => $nom);
            $this->update($data, 'Id_Entite = ' . (int)$id);
        }
     
        public function supprimerEntite($id){
            $this->delete('Id_Entite = ' . (int)$id);
        }    
     
    }
    Je me doute qu'il ne trouve pas ma classe. Mais je me demande surtout pourquoi etant donner qu'en temps normal grace a l'autoloader il la trouve ...

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 178
    Par défaut
    Hello,

    Vu ton message d'erreur, il trouve bien TA classe Model_DbTable_Entites mais pas sa classe de base Zend_Db_Table.

    La première chose à laquelle je pense dans ces cas là c'est que phpunit est lancé en ligne de commande et que des fois c'est pas le même php.ini qui est utilisé en ligne de commande que celui qui est utilisé par apache et que donc tu peux avoir des différence au niveau de l'include_path.

    Très probablement, la library Zend n'est pas dans l'include path du php.ini utilisé en ligne de commande.

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 63
    Par défaut
    Merci de repondre cependant. Après verification, php utilise le meme .ini dans les deux cas et la librairie y est bien renseignée.

    Si j'arrivais a faire marcher l'autolaod des classes ca serait plus simple. N'y a t il pas un moyen de lancer un boostrap avant les tests?

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 178
    Par défaut
    Hé bien oui, il y a moyen, ça dépend si tu veux faire comme Zend et prendre en charge des suites de test.

    Perso, on a un rep _setup qui contient
    • un setUpTest.php qui déclare les include path et active le Zend_Loader
    • un setUpDb.php qui initialise la connexion base de données
    • un applySchema.php qui charge la structure SQL standard de l'application
    • un applayDatas.php qui charge des datas de test


    Ensuite dans chaque fichier de test, suivant ce qu'on a besoin de tester on a un bloc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (!defined('...')) {
     require ...
     define('...', 'OK')
    }
    Si ça peut te donner des idées ....

  5. #5
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 63
    Par défaut
    Oui plus ou moins merci

    Tu peut me donner un exemple pour ton SetUpDB stp??

    Le laoder tu utilise la vieille version ou la 1.8?? Si tu utilise la derniere comment tu l'initialise dans les test ??

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 178
    Par défaut
    Hello,

    Malheureusement, on est sur un ZF 1.6, c'est donc du vieil autoload

    Le setup db est très particulier à mon appli mais en gros ça donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if (null == Zend_Db_Table_Abstract::getDefaultAdapter()) {
      // j'instancie mon plug-in d'init d'application
      // je lui demande de charger la conf d'appli
      // je manipule la conf chargée pour rajouter "_test" au dbname
      // je lui demande de faire la connexion à la base de donnée
    }
    En gros, on utilise certaines méthodes de notre plug-in d'initialisation utilisé normalement par l'application.

Discussions similaires

  1. [DOM] Comment ça "Class DomDocument not found" ? (PHP5)
    Par Nullos Oracle dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 13/07/2007, 18h11
  2. [Zip] Class ZipArchive not found
    Par Sayrus dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 07/06/2007, 16h04
  3. classe .cls not found
    Par iznogoud36 dans le forum Erreurs - Avertissements
    Réponses: 1
    Dernier message: 07/03/2007, 23h55
  4. Réponses: 1
    Dernier message: 09/02/2007, 14h59
  5. [TOMCAT 5.0 - JSP] Load: class XXX not found
    Par Hoegaarden dans le forum Tomcat et TomEE
    Réponses: 12
    Dernier message: 20/10/2005, 09h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo