Prev Next

Chapitre 5. Le lanceur de tests en ligne de commandes

Le lanceur de tests en ligne de commandes de PHPUnit peut être appelé via la commande phpunit. Le code suivant montre comment exécuter des tests avec le lanceur de tests en ligne de commandes de PHPUnit:

phpunit ArrayTest
PHPUnit 3.7.0 by Sebastian Bergmann.

..

Time: 0 seconds


OK (2 tests, 2 assertions)

Pour chaque test exécuté, l'outil en ligne de commandes de PHPUnit affiche un caractère pour indiquer l'avancement:

.

Affiché quand le test a réussi.

F

Affiché quand une assertion échoue lors de l'exécution d'une méthode de test.

E

Affiché quand une erreur survient pendant l'exécution d'une méthode de test.

S

Affiché quand le test a été sauté (voir Chapitre 9, Tests incomplets et sautés).

I

Affiché quand le test est marqué comme incomplet ou pas encore implémenté (voir Chapitre 9, Tests incomplets et sautés).

PHPUnit différencie les échecs et les erreurs. Un échec est une assertion PHPUnit violée comme un appel en échec de assertEquals(). Une erreur est une exception inattendue ou une erreur PHP. Parfois cette distinction s'avère utile car les erreurs tendent à être plus faciles à corriger que les échecs. Si vous avez une longue liste de problèmes, il vaut mieux éradiquer d'abord les erreurs pour voir s'il reste encore des échecs uen fois qu'elles ont été corrigées.

Options de la ligne de commandes

Jetons un oeil aux options du lanceur de tests en ligne de commandes dans le code suivant :

phpunit --help
PHPUnit 3.7.0 by Sebastian Bergmann.

Usage: phpunit [switches] UnitTest [UnitTest.php]
       phpunit [switches] <directory>

  --log-junit <file>        Log test execution in JUnit XML format to file.
  --log-tap <file>          Log test execution in TAP format to file.
  --log-json <file>         Log test execution in JSON format.

  --coverage-clover <file>  Generate code coverage report in Clover XML format.
  --coverage-html <dir>     Generate code coverage report in HTML format.
  --coverage-php <file>     Serialize PHP_CodeCoverage object to file.
  --coverage-text=<file>    Generate code coverage report in text format.
                            Default to writing to the standard output.

  --testdox-html <file>     Write agile documentation in HTML format to file.
  --testdox-text <file>     Write agile documentation in Text format to file.

  --filter <pattern>        Filter which tests to run.
  --group ...               Only runs tests from the specified group(s).
  --exclude-group ...       Exclude tests from the specified group(s).
  --list-groups             List available test groups.

  --loader <loader>         TestSuiteLoader implementation to use.
  --printer <printer>       TestSuiteListener implementation to use.
  --repeat <times>          Runs the test(s) repeatedly.

  --tap                     Report test execution progress in TAP format.
  --testdox                 Report test execution progress in TestDox format.

  --colors                  Use colors in output.
  --stderr                  Write to STDERR instead of STDOUT.
  --stop-on-error           Stop execution upon first error.
  --stop-on-failure         Stop execution upon first error or failure.
  --stop-on-skipped         Stop execution upon first skipped test.
  --stop-on-incomplete      Stop execution upon first incomplete test.
  --strict                  Run tests in strict mode.
  -v|--verbose              Output more verbose information.
  --debug                   Display debbuging information during test execution.

  --process-isolation       Run each test in a separate PHP process.
  --no-globals-backup       Do not backup and restore $GLOBALS for each test.
  --static-backup           Backup and restore static attributes for each test.

  --bootstrap <file>        A "bootstrap" PHP file that is run before the tests.
  -c|--configuration <file> Read configuration from XML file.
  --no-configuration        Ignore default configuration file (phpunit.xml).
  --include-path <path(s)>  Prepend PHP's include_path with given path(s).
  -d key[=value]            Sets a php.ini value.

  -h|--help                 Prints this usage information.
  --version                 Prints the version and exits.
phpunit UnitTest

Exécute les tests qui sont fournis par la classe UnitTest. Cette classe est supposée être déclarée dans le fichier source UnitTest.php.

UnitTest doit soit être une classe qui hérite de PHPUnit_Framework_TestCase soit une classe qui fournit une méthode public static suite() retournant un objet PHPUnit_Framework_Test, par exemple une instance de la classe PHPUnit_Framework_TestSuite.

phpunit UnitTest UnitTest.php

Exécute les tests qui sont fournis par la classe UnitTest. Cette classe est supposée être déclarée dans le fichier source indiqué.

--log-junit

Génère un fichier de log au format JUnit XML pour les tests exécutés. Voir Chapitre 18, Journalisation pour plus de détails.

--log-tap

Génère un fichier de log utilisant le format Test Anything Protocol (Protocol de test universel ou TAP) pour les tests exécutés. Voir Chapitre 18, Journalisation pour plus de détails.

--log-json

Génère un fichier de log en utilisant le format JSON. Voir Chapitre 18, Journalisation pour plus de détails.

--coverage-html

Génère un rapport de couverture de code au format HTML. Voir Chapitre 14, Analyse de couverture de code pour plus de détails.

Merci de noter que cette fonctionnalité n'est seulement disponible que lorsque les extensions tokenizer et Xdebug sont installées.

--coverage-clover

Génère un fichier de log au format XML avec les informations de couverture de code pour les tests exécutés. Voir Chapitre 18, Journalisation pour plus de détails.

Merci de noter que cette fonctionnalité n'est seulement disponible que lorsque les extensions tokenizer et Xdebug sont installées.

--coverage-php

Génère un objet sérialisé PHP_CodeCoverage contenant les informations de couverture de code.

Merci de noter que cette fonctionnalité n'est seulement disponible que lorsque les extensions tokenizer et Xdebug sont installées.

--coverage-text

Génère un fichier de log ou une sortie écran sur la ligne de commandes en format humainement lisible avec les informations de couverture de code pour les tests exécutés. Voir Chapitre 18, Journalisation pour plus de détails.

Merci de noter que cette fonctionnalité n'est seulement disponible que lorsque les extensions tokenizer et Xdebug sont installées.

--testdox-html et --testdox-text

Génère la documentation agile au format HTML ou texte pur pour les tests exécutés. Voir Chapitre 15, Autres utilisations des tests pour plus de détails.

--filter

Exécute seulement les tests dont le nom correspond au motif donné. Le motif peut être soit le nom d'un test particulier, soit une expression rationnelle qui correspond à plusieurs noms de tests.

--group

Exécute seulement les tests appartenant à un/des groupe(s) indiqué(s). Un test peut être signalé comme appartenant à un groupe en utilisant l'annotation @group.

L'annotation @author est un alias pour @group permettant de filtrer les tests en se basant sur leurs auteurs.

--exclude-group

Exclut les tests d'un/des groupe(s) indiqué(s). Un test peut être signalé comme appartenant à un groupe en utilisant l'annotation @group.

--list-groups

Liste les groupes de tests disponibles.

--loader

Indique l'implémentation de PHPUnit_Runner_TestSuiteLoader à utiliser.

Le chargeur standard de suite de tests va chercher les fichiers source dans le répertoire de travail actuel et dans chaque répertoire qui est indiqué dans la directive de configuration PHP include_path. Suivant les conventions de nommage PEAR, le nom d'une classe tel que Projet_Paquetage_Classe est calqué sur le nom de fichier source Projet/Paquetage/Classe.php.

--printer

Indique l'afficheur de résultats à utiliser. Cette classe d'afficheur doit hériter de PHPUnit_Util_Printer et implémenter l'interface PHPUnit_Framework_TestListener.

--repeat

Répéter l'exécution du(des) test(s) le nombre indiqué de fois.

--tap

Rapporte l'avancement des tests en utilisant le Test Anything Protocol (TAP). Voir Chapitre 18, Journalisation pour plus de détails.

--testdox

Rapporte l'avancement des tests sous forme de documentation agile. Voir Chapitre 15, Autres utilisations des tests pour plus de détails.

--colors

Utilise des couleurs pour l'affichage.

--stderr

Utilise optionnellement STDERR au lieu de STDOUT pour l'affichage.

--stop-on-error

Arrête l'exécution à la première erreur.

--stop-on-failure

Arrête l'exécution à la première erreur ou au premier échec.

--stop-on-skipped

Arrête l'exécution au premier test sauté.

--stop-on-incomplete

Arrête l'exécution au premier test incomplet.

--strict

Exécute les tests en mode strict.

--verbose

Affiche des informations plus détaillées, par exemple le nom des tests qui sont incomplets ou qui ont été sautés.

--process-isolation

Exécute chaque test dans un processus PHP distinct.

--no-globals-backup

Ne pas sauvegarder et restaurer $GLOBALS. Voir la section intitulée « Etat global » pour plus de détails.

--static-backup

Sauvegarde et restaure les attributs statiques des classes définies par l'utilisateur. Voir la section intitulée « Etat global » pour plus de détails.

--bootstrap

Un fichier PHP "amorce" ("bootstrap") est exécuté avant les tests.

--configuration, -c

Lit la configuration dans un fichier XML. Voir Annexe C, Le fichier de configuration Configuration pour plus de détails.

Si phpunit.xml ou phpunit.xml.dist (dans cet ordre) existent dans le répertoire de travail actuel et que --configuration n'est pas utilisé, la configuration sera automatiquement lue dans ce fichier.

--no-configuration

Ignorer phpunit.xml et phpunit.xml.dist du répertoire de travail actuel.

--include-path

Préfixe l'include_path PHP avec le(s) chemin(s) donné(s).

-d

Fixe la valeur des options de configuration PHP données.

--debug

Affiche des informations de débogage telles que le nom d'un test quand son exécution démarre.

Prev Next
1. Automatiser les tests
2. Objectifs de PHPUnit
3. Installer PHPUnit
4. Ecrire des tests pour PHPUnit
Dépendances des tests
Fournisseur de données
Tester des exceptions
Tester les erreurs PHP
Tester la sortie écran
Assertions
assertArrayHasKey()
assertClassHasAttribute()
assertClassHasStaticAttribute()
assertContains()
assertContainsOnly()
assertCount()
assertEmpty()
assertEqualXMLStructure()
assertEquals()
assertFalse()
assertFileEquals()
assertFileExists()
assertGreaterThan()
assertGreaterThanOrEqual()
assertInstanceOf()
assertInternalType()
assertJsonFileEqualsJsonFile()
assertJsonStringEqualsJsonFile()
assertJsonStringEqualsJsonString()
assertLessThan()
assertLessThanOrEqual()
assertNull()
assertObjectHasAttribute()
assertRegExp()
assertStringMatchesFormat()
assertStringMatchesFormatFile()
assertSame()
assertSelectCount()
assertSelectEquals()
assertSelectRegExp()
assertStringEndsWith()
assertStringEqualsFile()
assertStringStartsWith()
assertTag()
assertThat()
assertTrue()
assertXmlFileEqualsXmlFile()
assertXmlStringEqualsXmlFile()
assertXmlStringEqualsXmlString()
5. Le lanceur de tests en ligne de commandes
Options de la ligne de commandes
6. Fixtures
Plus de setUp() que de tearDown()
Variantes
Partager les Fixtures
Etat global
7. Organiser les tests
Composer une suite de tests en utilisant le système de fichiers
Composer une suite de tests en utilisant la configuration XML
8. Tester des bases de données
Systèmes gérés pour tester des bases de données
Difficultés pour tester les bases de données
Les quatre phases d'un test de base de données
1. Nettoyer la base de données
2. Configurer les fixtures
3–5. Exécuter les tests, vérifier les résultats et nettoyer
Configuration d'un cas de test de base de données PHPUnit
Implémenter getConnection()
Implémenter getDataSet()
Qu'en est-il du schéma de base de données (DDL)?
Astuce: utilisez votre propre cas de tests abstrait de base de données
Comprendre DataSets et DataTables
Implémentations disponibles
Attention aux clefs étrangères
Implementer vos propres DataSets/DataTables
L'API de connexion
API d'assertion de base de données
Faire une assertion sur le nombre de lignes d'une table
Faire une assertion sur l'état d'une table
Faire une assertion sur le résultat d'une requête
Faire une assertion sur l'état de plusieurs tables
Foire aux questions
PHPUnit va-t'il (re-)créer le schéma de base de données pour chaque test ?
Suis-je obligé d'utiliser PDO dans mon application pour que l'extension de base de données fonctionne ?
Que puis-je faire quand j'obtiens une erreur « Too much Connections (Trop de connexions) » ?
Comment gérer les valeurs NULL avec les DataSets au format XML à plat / CSV ?
9. Tests incomplets et sautés
Tests incomplets
Sauter des tests
Sauter des tests en utilisant @requires
10. Doublure de test
Bouchons
Objets simulacres (Mock Objects)
Bouchon et simulacre pour Web Services
Simuler le système de fichiers
11. Pratiques de test
Pendant le développement
Pendant le débogage
12. Développement dirigé par les tests
Exemple du compte bancaire
13. Développement dirigé par le comportement
Exemple du jeu de Bowling
14. Analyse de couverture de code
Spécifier les méthodes couvertes
Ignorer des blocs de code
Inclure et exclure des fichiers
Cas limites
15. Autres utilisations des tests
Documentation agile
Tests transverses à l'équipe
16. Générateur de squelette
Générer un squelettre de classe de cas de test
Générer un squelette de classe à partir d'une classe de cas de test
17. PHPUnit et Selenium
Selenium Server
Installation
PHPUnit_Extensions_Selenium2TestCase
PHPUnit_Extensions_SeleniumTestCase
18. Journalisation
Résultats de test (XML)
Résultats de test (TAP)
Résultats de test (JSON)
Couverture de code (XML)
Couverture de code (TEXTE)
19. Etendre PHPUnit
Sous-classe PHPUnit_Framework_TestCase
Ecrire des assertions personnalisées
Implémenter PHPUnit_Framework_TestListener
Sous classer PHPUnit_Extensions_TestDecorator
Implémenter PHPUnit_Framework_Test
A. Assertions
B. Annotations
@author
@backupGlobals
@backupStaticAttributes
@codeCoverageIgnore*
@covers
@coversNothing
@dataProvider
@depends
@expectedException
@expectedExceptionCode
@expectedExceptionMessage
@group
@outputBuffering
@requires
@runTestsInSeparateProcesses
@runInSeparateProcess
@test
@testdox
@ticket
C. Le fichier de configuration Configuration
PHPUnit
Série de tests
Groupes
Inclure et exclure des fichiers de la couverture de code
Journalisation
Moniteurs de tests
Configurer les réglages de PHP INI, les constantes et les variables globales
Configurer les navigateurs pour Selenium RC
D. Index
Index
E. Bibliographie
F. Copyright