Introduction
- En PHPUnit on retrouvera la même structuration des classes implémentant les tests qu'en JUnit
-
les TestCases étendent toutes PHPUnit_Framework_TestCase
- les méthodes de test commencent toutes par testXXX()
- ou alors les méthodes de test sont annotées par /** *@test */ XXX()
-
les TestSuites sont matérialisés soit par :
- des TestCases regroupés dans des répertoires spécifiques
-
- TestSuite
- DossierTestCaseX
- TestCaseX1.php
- TestCaseX2.php
- ..
- DossierTestCaseY
- TestCaseY1.php
- TestCaseY2.php
- ..
- des TestCases répertoriés dans le fichier de configuration phpunit.xml section
<phpunit>
<testsuites>
<testsuite name="ts1">
<file>Test1.php</..>
..
</phpunit>
- Documentation et logiciel disponibles ici. Pour les anciennes versions de PHP, vous pouvez récupérer une version antérieure de PhpUnit ici
Travail à effectuer
-
Reprendre les exercices proposés dans la section JUnit exercices en les transposant en PHPUnit.
-
Les classes Money src et test en php
- money_php.zip
- Lors de desarchivage vous obtiendrez un répertoire money_php contenant les dossiers src et test
Tests avec Netbeans (au M5)
-
Créer un projet Php en Netbeans avec sources existantes
- Indiquer que les sources du projet se trouvent dans money_php
- Normalement, il faudra séparer entre src (Source files) et test (Test files).
- Chez vous, vous pouvez séparer les src et les tests, et en configurant PHPUnit sous Netbeans, vous pourrez exécuter les tests en local.
- Choisir le nom de votre projet
- Choisir de placer les Project Metadata dans un autre répertoire
- Configurer l'application Php comme une application "with existing Sources"
- Associer les sources à votre dossier contenant les src et les tests
- Choisissez "Put NetBeans data into a separate directory" afin de faciliter la séparation entre fichiers de configuration de votre projet et vos sources
- Dans l'écran concernant "Run Configuration" choisissez "Run As : PHP Built-In Web Server"
- Indiquer que les sources du projet se trouvent dans money_php
-
Configurer PhpUnit
- Dans les propriétés de projet (Properties/Testing) cochez PhpUnit
- Ajoutez également depuis ce même onglet le dossier de tests (Test Directories : Add Folder)
- Dans l'onglet Properties/Testing/PhpUnit indiquez le chemin vers le fichier PhpUnit.phar téléchargé
- Ensuite, depuis la vue projet, faites des cliques droite + Run sur chaque fichier test que vous souhaitez exécuter.
Exécution de tests (en ligne de commande)
-
Vous pouvez lancer un serveur PHP local en dehors de NetBeans en utilisant la commande suivante *** php -S 127.0.0.1:8080 -t CHEMIN *** où CHEMIN correspond à la racine de votre projet
-
Se placer dans le répertoire PROJET
-
Lancer tous vos tests dans le répertoire test avec '''phpunit test'''
-
ou alors remplacez le test par le nom du fichier à exécuter.
-
cela exécutera tous les tests contenus dans les fichiers ** *Test.php ** du répertoire test et ses éventuels sous-repertoires
-
Jouer avec ...
-
En analysant le code src et test, peut-on tirer une conclusion quelconque quant à la correctitude de la méthode MoneyOps.simpleAdd ?
-
Que doit-on faire avant ? Modifier la classe Money et écrivez les tests adéquats pour valider vos modifications.
-
Re-tester le testcase MoneyOpsAddTest. Qu'observez-vous?
-
Peut-on conclure que l'implémentation est correcte ? Si besoin, modifier la classe, ajouter des méthodes de test dans le testcase, etc.
- N'oubliez pas qu'après chaque modification sur une classe vous devez ré-éxecuter l'ensemble des tests.
Créer des nouveaux méthodes de test
- Etendre le testcase MoneyOpsAdd pour couvrir le plus possible les cas de figures possibles
- Créer des nouvelles opérations et les testcases correspondants
- par exemple : soustraction (v1 - v2 avec une exception si v1 < v2 ou si pas la même unité monétaire)
- pour lever une exception en PHP il faut utiliser throw new NOM_CLASSE_Exception();
- pour indiquer qu'un test doit lever une exception, placer ce code dans la fonction de test : $this->setExpectedException('NOM_CLASSE_Exception');
- par exemple : soustraction (v1 - v2 avec une exception si v1 < v2 ou si pas la même unité monétaire)
Tests "croisés" (optionnel)
-
Une fois que vous estimé avoir corrigé le code envoyez-le à la personne à votre gauche, en mettant en place un svn/hg/git de commun accord.
-
Demandez-lui de tester votre code.