Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour à tous,
J'ai un début de projet utilisant à la fois la logique MVC du Zend Framework et l'ORM Doctrine.
Jusque là pas de problème - cela fonctionne même plutôt bien.
Le problème que je rencontre se trouve au niveau des tests unitaires (PHPUnit).
L'arborescence de mon projet actuel
monprojet
+ application
+ configs
+ controllers
+ forms
+ models
+ generated
BaseUser.php
...
User.php
...
+ scripts
+ views
+ library
+ public
+ tests
+ application
+ controllers
+ models
UserTest.php
...
+ library
+ log
phpunit.xml
Ma classe User se présente sous la forme :
class User extends BaseUser
{
const ...
...
public static function ...
...
}
Et BaseUser.php est donc une classe abstraite :
abstract class BaseUser extends Doctrine_Record
{
public function setTableDefinition()
{
...
}
...
}
Le problème c'est que lorsque j'exécute les tests unitaires (fichier UserTest.php dans le répertoire correspondant), j'ai le message d'erreur suivant : "Fatal error: Class 'User' not found in D:\www\monprojet\tests\application\models\UserTest.php" sur la ligne "$u = new User();".
Je me suis dit, c'est normal, il ne connait pas la classe User (bien que Zend Studio soit en mesure de retrouver le fichier en question). J'ai donc rajouté un petit require_once pour corriger cela.
Le hic c'est que cela ne fonctionne toujours pas, l'erreur porte juste sur les autres fichiers maintenant, en l'occurence ici "BaseUser.php". Si je rajoute encore un require_once, c'est alors "Doctrine_Record" qui n'est pas connu, etc...
Comment réalisez-vous vos tests unitaires sur la partie "models" ?
J'ai suivi le tuto correspondant sur ZendCasts mais je n'ai rien de plus (ou de moins) au niveau de mes fichiers. Avez-vous une idée ?
Par avance merci. Bonne soirée.
Dernière modification par StefC30 (17-03-2013 19:44:24)
Hors ligne
Il faut que tu configure l'autoloader pour tes models dans le bootstrap de tes tests.
Hors ligne
Ok, mais est-ce le fichier "bootstrap.php" que l'on retrouve normalement dans "tests/applications" ou celui qui se trouve dans le répertoire "tests/library" (qui est vide actuellement) ?
A ce sujet, à quoi sert ce dernier ?
Dernière modification par StefC30 (17-03-2013 19:45:03)
Hors ligne
Comme c'est pour tester les composantes de ton application tu devrais utiliser celui qui se trouve dans le répertoire "tests/applications"
L'autre servirait à tester une bibliothèque maison.
Ce fichier sert à initialiser un environnement de test comme on le fait pour l'application.
Hors ligne
C'est logique, en effet.
Je vais quand même jeter un oeil sur le fichier "application.ini" et la section correspondante des sources du projet ZendCasts.
Il doit bien y avoir une différence avec mon projet, car mon bootstrap (sous "test/application") est identique mais cela ne fonctionne pas.
En tous cas merci.
Dernière modification par StefC30 (17-03-2013 19:45:16)
Hors ligne
Pas mieux, mon "application.ini" est similaire.
J'ai même plus "d'autoload" que sur le projet "Unit Test Model" ZendCasts.
Etrange tout de même.
D'autres idées ?
Dernière modification par StefC30 (17-03-2013 19:45:31)
Hors ligne
Tes classes ne devrait pas être préfixé de Model ?
class Model_User extends Model_Generated_BaseUser //Suivant l'arborescence, mais vue que c'est doctrine j'suis pas certain { }
Comme tu n'utilises pas une architecture modulaire je ne suis plus certain si c'est comme ça!?
Hors ligne
Bonsoir 3uclide,
A priori ce n'est pas nécessaire.
Les noms correspondent à ceux indiqués dans un autre tuto concernant l'intégration de Doctrine 1.2 avec Zend Framework 1.10.
De plus, les classes sont automatiquement générées par Doctrine depuis la base de données et le fonctionnement de l'application est correct.
Seuls les tests unitaires me posent problème.
Dernière modification par StefC30 (17-03-2013 19:45:57)
Hors ligne
Quelques tentatives (modification du bootstrap des tests, du fichier de config...) plus tard, toujours pas de résultat. :-(
Je n'ai rien trouvé de particulier dans les tuto ZC 38 et suivants concernant Doctrine.
Le pire c'est que lorsque je lance les tests unitaires depuis Zend Studio en debug, aucun point d'arrêt n'a d'effet dans les différents fichiers "bootstrap.php". A croire qu'ils ne sont pas utilisés.
Quelqu'un a-t-il déjà rencontré un cas similaire ?
Dernière modification par StefC30 (17-03-2013 19:46:13)
Hors ligne
Bon, à priori personne ne fait de test unitaire pour la couche modèle ici.
Pas bien... :p
Je suis tout de même très étonné que les projets ZendCasts ne s’exécutent pas directement sous Zend Studio.
Si je n’effectue pas de modification dans le code proposé, le premier test échoue immédiatement car certaines classes ne sont pas connues. Je suis donc obligé de rajouter des "require_once" à tout va. Cela ne fait d'ailleurs que "déplacer" le problème jusqu'aux classes Doctrine.
Lorsque j’exécute le même test en mode debug, mon bootstrap n’est même pas utilisé.
Quelqu'un aurait-il une idée ?
Dernière modification par StefC30 (17-03-2013 19:47:03)
Hors ligne
Hello,
J'ai un peu le même souci avec PhpUnit et Zend Framework pour tester les modèles.
Mon arborescence :
application
-- models
---- + User.php
tests
-- application
---- models
------ + UserTest.php
Mon modèle User.php étends Zend_Db_Table
class Model_User extends Zend_Db_Table
Lorsque je lance phpunit, j'ai le message d'erreur :
PHP Fatal error: Class 'Zend_Db_Table' not found in /var/www/myapp/application/models/User.php on line 6
Le problème est résolu si j'ajoute l'include de Zend/Db/Table.php en début de fichier, mais je ne pense pas que ça soit l'idéal.
Si quelqu'un a une solution je suis également preneur.
Merci,
Laurent
Hors ligne
En effet Saeba, car on ne fait que déplacer le problème.
Je n'ai pas encore trouvé la solution.
Ceci dit, voici tout de même un article intéressant au sujet des tests unitaires dans une application utilisant le Zend Framework : http://ajbrown.org/blog/2009/01/04/auto … art-1.html
Dernière modification par StefC30 (17-03-2013 19:47:53)
Hors ligne