L'outil de test de ligne de commande PHPUnit est appelé via la commande phpunit. Le code suivant montre comment exécuter des tests via l'outil de test en ligne de commande PHPUnit.
phpunitArrayTest
PHPUnit 2.3.0 par Sebastian Bergmann
Temps : 0,067288
OK (2 tests)
Pour chaque test, l'outil de test en ligne de commande PHPUnit imprime un caractère indiquant le processus :
· Un test réussi imprime ".".
·Lors de l'exécution de la méthode de test, un échec d'assertion se produit et "F" est imprimé.
·Lors de l'exécution de la méthode de test, une erreur se produit et « E » est imprimé.
·Le test n'est pas terminé ou le test n'imprime pas "I" (voir le chapitre "Tests inachevés" à la fin de ce livre).
PHPUnit peut faire la distinction entre les échecs et les erreurs. Un échec est une violation d'assertion PHPUnit et une erreur est une exception inattendue ou une erreur PHP. Parfois, cette distinction est utile car les erreurs sont plus faciles à corriger que les échecs. Si vous avez une longue liste de problèmes, c'est une bonne idée de résoudre d'abord toutes les erreurs, puis de voir s'il reste des échecs.
Examinons ci-dessous certaines des options de l'outil de test de code en ligne de commande :
phpunit --help
PHPUnit 2.3.0 par Sebastian Bergmann
Utilisation : phpunit [commutateurs] UnitTest [UnitTest.php]
--coverage-data <file> Écrit les données de couverture de code au format brut dans un fichier.
--coverage-html <file> Écrit les données de couverture de code au format HTML dans un fichier.
--coverage-text <file> Écrit les données de couverture de code au format texte dans un fichier.
--testdox-html <file> Écrivez la documentation agile au format HTML dans un fichier.
--testdox-text <file> Écrivez la documentation agile au format texte dans un fichier.
--log-xml <file> Enregistre la progression du test au format XML dans un fichier.
--loader <loader> Implémentation de TestSuiteLoader à utiliser.
--skeleton Génère la classe UnitTest squelette pour Unit dans Unit.php.
--wait Attend une frappe après chaque test.
--help Imprime ces informations d'utilisation.
--version Imprime la version et quitte.
phpunit UnitTest
exécute les tests fournis par la classe UnitTest, qui doit être définie dans le fichier source UnitTest.php.
La classe UnitTest doit hériter de la classe PHPUnit2_Framework_TestCase, ou fournir une suite de méthodes statiques publique et renvoyer la classe de l'objet PHPUnit2_Framework_Test (par exemple, une instance de la classe PHPUnit2_Framework_TestSuite).
phpunit UnitTest UnitTest.php
exécute le test fourni par la classe UnitTest, qui est défini dans la commande Dans le fichier source spécifié (UnitTest.php).
--coverage-data, --coverage-html et --coverage-text
contrôlent l'analyse et la collecte des informations de couverture de code pour l'exécution des tests (voir la section Analyse de couverture de code à la fin de ce livre)
--testdox-html et --testdox-text
génère une documentation agile pour exécuter des tests au format HTML ou texte brut (voir le chapitre « Autres utilisations des tests » à la fin de ce livre)
--log-xml
génère des fichiers journaux au format XML pour exécuter des tests.
L'exemple suivant montre le fichier journal XML généré pour les tests dans ArrayTest.
<?xml version="1.0" encodage="UTF-8"?>
<suites de tests>
<testsuite name="ArrayTest" tests="2" fails="0" error="0" time="0.020026">
<testcase name="testNewArrayIsEmpty" class="ArrayTest" time="0.014449"/>
<testcase name="testArrayContainsAnElement" class="ArrayTest" time="0.005577"/>
</suite de tests>
</testsuites>
Le fichier journal XML suivant est généré pour deux tests de la classe de test nommée FailureErrorTest, l'un est testFailure et l'autre est testError. Cela montre comment les échecs et les erreurs sont représentés séparément.
<?xml version="1.0" encodage="UTF-8"?>
<suites de tests>
<testsuite name="FailureErrorTest" tests="2" échecs="1" erreurs="1" time="0.013603">
<nom du cas de test="testFailure" class="FailureErrorTest" time="0.011872">
<message d'échec="" type="PHPUnit2_Framework_AssertionFailedError"></échec>
</cas de test>
<nom du cas de test="testError" class="FailureErrorTest" time="0.001731">
<message d'erreur="" type="Exception"></erreur>
</cas de test>
</suite de tests>
</suites de tests>
--loader
spécifie le chargeur de suite de tests à utiliser.
Le chargeur de suite de tests standard recherche les fichiers sources dans le répertoire de travail actuel et dans le chemin défini par la directive de configuration include_path de PHP. Selon les règles de dénomination de PEAR, le fichier source mappé à un nom de classe sous la forme Project_Package_Class est Project/Package/Class.php.
--skeleton
génère un squelette pour une classe de cas de test appelée UnitTest (dans le fichier UnitTest.php) pour la classe Unit (dans le fichier Unit.php). Pour chaque méthode de la classe d'origine, un scénario de test inachevé est fourni dans la classe de scénario de test généré (voir la section "Tests inachevés" à la fin de ce livre).
L'exemple suivant montre comment générer une classe de test squelette pour une classe nommée Sample.
phpunit --skeleton Exemple
PHPUnit 2.3.0 par Sebastian Bergmann.
Écrit le squelette de la classe de test pour Sample to
SampleTest.php.
phpunit Exemple de test
PHPUnit 2.3.0 par Sebastian Bergmann.
je
Heure : 0,007268
Il y avait 1 scénario de test incomplet :
1) testSampleMethod(SampleTest)
OK, mais des cas de tests incomplets !!!
Tests exécutés : 1, cas de test incomplets : 1.
Lorsque vous écrivez des tests pour du code existant, vous devez répéter plusieurs des mêmes extraits de code, tels que :
public function testSampleMethod( ) {}
PHPUnit peut vous aider à analyser le code existant et à générer A cadre pour les classes de cas de test.
--wait
À la fin de chaque test, attendez une frappe. Ceci est particulièrement utile si vous exécutez des tests dans une fenêtre où seul le test est exécuté à tout moment.
Astuce : lorsqu'il y a une erreur de syntaxe PHP dans le code testé, le test de l'interface texte se terminera directement sans afficher de message d'erreur. Le chargeur de suite de tests standard vérifie les fichiers sources de la suite de tests pour les erreurs de syntaxe PHP. Cependant, il ne vérifie pas les fichiers sources inclus dans la suite de tests pour les erreurs de syntaxe. Les futures versions de PHPUnit résoudront ce problème en utilisant des classes d'interpréteur PHP en bac à sable.