Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour à tous
J'essaie depuis 2 jours de mettre en place les tests unitaires sur un projet très simple (pour commencer), en m'appuyant sur Zend_Test
j'ai trouvé pas mal de tuto, mais aucun ne m'a permis d'aboutir.
Quelqu'un aurait-il réellement mis en place ces tests unitaires (sur Zend_test et pas uniquement PHPUnit) et aurait le courage de poster quelque part ses sources (phpunit.xml, les bootstrap et les script d'exécutions phpunit).
Merci d'avance.
Hors ligne
Hello,
J'ai donné un webinar sur le sujet, il y a quelques exemples : http://www.slideshare.net/mikaelkael/te … rk-5155326
@+
Hors ligne
Merci de ta réponse rapide
J'ai vu ton webinar, que j'ai trouvé très simple.
Mais je n'ai pas réussi à exécuter les tests.
J'utilise le script phpunit à la racine du répertoire "tests".
Seules les classes etendant PHPUnit_Framework_TestCase sont instanciée par phpunit.
Ce qui n'ai pas le cas des classes que tu décris dans ton webinar.
Sur les classes de test qui étendent PHPUnit_Framework_TestCase, phpunit s'exécute correctement.
J'ai oublié quelque chose mais quoi ?
mikaelkael a écrit:
Hello,
J'ai donné un webinar sur le sujet, il y a quelques exemples : http://www.slideshare.net/mikaelkael/te … rk-5155326
@+
Dernière modification par jcb (12-10-2010 14:24:46)
Hors ligne
Apparemment, il ne semble pas aussi simple que ça :p
En slide 35, ExempleControllerTest étend Zend_Test_PHPUnit_ControllerTestCase qui étend elle même PHPUnit_Framework_TestCase et est donc reconnu par PHPUnit
Le webinar est aussi disponible sous forme audio : http://www.zend.com/fr/resources/webinars/
Hors ligne
J'ai recopié le fichier phpunit.xml et le Bootstrap.php de ton tuto.
J'ai réduis ExempleControllerTest.php à :
class ExempleControllerTest extends Zend_Test_PHPUnit_ControllerTestCase { public function setUp() { } public function testPageStatiqueAUneBonneStructure() { } }
Je tappe "phpunit" depuis le réperoire "tests",et j'obtiens ça :
atal error: Uncaught exception 'PHPUnit_Framework_Exception' with message 'Neither "Suite de tests.php" nor "Suite de tests.php" could be opened.' in C:\wamp\bin\php\php5.3.0\PEAR\PHPUnit\Util\Skeleton\Test.php:102 Stack trace: #0 C:\wamp\bin\php\php5.3.0\PEAR\PHPUnit\TextUI\Command.php(157): PHPUnit_Util_Skeleton_Test->__construct('Suite de tests', '') #1 C:\wamp\bin\php\php5.3.0\PEAR\PHPUnit\TextUI\Command.php(129): PHPUnit_TextUI_Command->run(Array, true) #2 C:\wamp\bin\php\php5.3.0\phpunit(52): PHPUnit_TextUI_Command::main() #3 {main} thrown in C:\wamp\bin\php\php5.3.0\PEAR\PHPUnit\Util\Skeleton\Test.php on line 102
Si je modifie mon controller comme suit :
class ExempleControllerTest extends PHPUnit_Framework_TestCase { public function setUp() { } public function testPageStatiqueAUneBonneStructure() { } }
J'obtiens :
PHPUnit 3.5.0 by Sebastian Bergmann. Suite de tests ExempleControllerTest . Time: 1 second, Memory: 3.25Mb OK (1 test, 0 assertions)
Et si je mets les deux controllers, ça marche. Ce qui me fait penser que phpunit ne voit pas la première classe de tests, celle qui étend Zend_Test_PHPUnit_ControllerTestCase.
N'y a-t-il pas un moyen de forcer phpunit à traiter les "petits enfants" de PHPUnit_Framwork_TestCase ?
J'utilise Zend Framework 1.10 et phpunit 3.5.0
mikaelkael a écrit:
Apparemment, il ne semble pas aussi simple que ça :p
En slide 35, ExempleControllerTest étend Zend_Test_PHPUnit_ControllerTestCase qui étend elle même PHPUnit_Framework_TestCase et est donc reconnu par PHPUnit
Le webinar est aussi disponible sous forme audio : http://www.zend.com/fr/resources/webinars/
Hors ligne
Si tu comprends la langue de Shakespeare, ZendCast a sorti, il y a 2 jours, un nouveau screencast Unit Testing Models qui est très bien fait aussi.
J'aime beaucoup leur style d'écrire et de tester leur code en direct, je trouve cela très didactique.
Hors ligne
Shakespeare c'est un peu présomptueux, mais Bill Gates, ça devrais passer.
Merci pour le lien, je regarde ça.
Ithier a écrit:
Si tu comprends la langue de Shakespeare, ZendCast a sorti, il y a 2 jours, un nouveau screencast Unit Testing Models qui est très bien fait aussi.
J'aime beaucoup leur style d'écrire et de tester leur code en direct, je trouve cela très didactique.
Hors ligne
J'ai vu le tuto et en effet, c'est bien agréable d'avoir le code en direct.
Ceci dit, l'auteur n'utilise pas Zend_Test mais uniquement PHPUnit.
Je connais PHPUnit et j'arrive à peu près à l'utiliser avec Zend, mais pour tester le MVC il me semble de Zend_Test serait le bienvenue.
jcb a écrit:
Shakespeare c'est un peu présomptueux, mais Bill Gates, ça devrais passer.
Merci pour le lien, je regarde ça.Ithier a écrit:
Si tu comprends la langue de Shakespeare, ZendCast a sorti, il y a 2 jours, un nouveau screencast Unit Testing Models qui est très bien fait aussi.
J'aime beaucoup leur style d'écrire et de tester leur code en direct, je trouve cela très didactique.
Hors ligne
Hello,
Peux-tu montrer la structure de ton projet (application et tests) ?
@+
Hors ligne
--monappli ----application - ----configs - ----controllers - ------indexController.php - ----layouts - - ----scripts - ----views - ----scripts - ----error - ----index ----public ----tests ----application - ----controllers - ------indexControllerTest.php - ------ExempleControllerTest.php ----library ----log ----coverage
mikaelkael a écrit:
Hello,
Peux-tu montrer la structure de ton projet (application et tests) ?
@+
Hors ligne
Hello,
Peux-tu montrer aussi le dossier library (avec le ZF), les fichier Bootstrap.php et phpunit.xml ?
@+
Hors ligne
----tests ----application - ----controllers - ------indexControllerTest.php - ------ExempleControllerTest.php ----library - ------bootstrap.php ----log ----coverage ----Bootstrap.php ----phpunit.xml
Le Bootstrap.php à la racine de test :
$rootPath = realpath(dirname(__DIR__)); if (!defined('APPLICATION_PATH')) { define('APPLICATION_PATH', $rootPath . '/application'); } if (!defined('APPLICATION_ENV')) { define('APPLICATION_ENV', 'testing'); } set_include_path(implode(PATH_SEPARATOR, array( '.', $rootPath . ';C:/ZendFramework-1.10.2/library/', get_include_path(), ))); require_once 'Zend/Loader/Autoloader.php'; $loader = Zend_Loader_Autoloader::getInstance(); $loader->registerNamespace('Application_');
Comme tu peux le voir, le ZF est à l'extérieur du projet (j'ai plusieurs projets ZF)
Le phpunit.xml :
<phpunit bootstrap="./Bootstrap.php" colors="true"> <testsuite name="Suite de tests"> <directory>./</directory> </testsuite> <filter> <whitelist> <directory suffix=".php">../library/</directory> <directory suffix=".php">../application/</directory> <exclude> <directory suffix=".phtml">../application/</directory> </exclude> </whitelist> </filter> <logging> <log type="coverage-html" target="./log/coverage" charset="UTF-8" yui="true" highlight="true" lowUpperBound="35" highLowerBound="70" /> <log type="testdox" target="./log/testdox.html" /> </logging> </phpunit>
mikaelkael a écrit:
Hello,
Peux-tu montrer aussi le dossier library (avec le ZF), les fichier Bootstrap.php et phpunit.xml ?
@+
Hors ligne
Hello,
Je dois passer à côté de qqch car j'ai strictement la même structure que toi et cela fonctionne.
Désolé.
@+
Edit : j'ai tout de même un
$loader->setFallbackAutoloader(true);
en plus dans le bootstrap.
Hors ligne
Je suis sous windows avec wamp.
xdebug n'ai pas installer, ça peut venir de là ?
mikaelkael a écrit:
Hello,
Je dois passer à côté de qqch car j'ai strictement la même structure que toi et cela fonctionne.
Désolé.
@+
Edit : j'ai tout de même unCode:
$loader->setFallbackAutoloader(true);en plus dans le bootstrap.
Hors ligne
Bon bah j'ai honte.
Au cours de mes pérégrinations j'ai dû modifier la classe ControllerTestCase qui n'étendait plus PHPUnit_Framework_TestCase mais PHPUnit_TestCase.
Donc phpunit n'en voulait pas.
Merci de votre aide.
jcb a écrit:
Je suis sous windows avec wamp.
xdebug n'ai pas installer, ça peut venir de là ?mikaelkael a écrit:
Hello,
Je dois passer à côté de qqch car j'ai strictement la même structure que toi et cela fonctionne.
Désolé.
@+
Edit : j'ai tout de même unCode:
$loader->setFallbackAutoloader(true);en plus dans le bootstrap.
Hors ligne