Chapitre 5. Organiser les tests

L'un des objectifs de PHPUnit est que les tests soient combinables : nous voulons pouvoir exécuter n'importe quel nombre ou combinaison de tests ensembles, par exemple tous les tests pour le projet entier, ou les tests pour toutes les classes d'un composant qui constitue une partie du projet ou simplement les tests d'une seule classe particulière.

PHPUnit gère différente façon d'organiser les tests et de les combiner en une suite de tests. Ce chapitre montre les approches les plus communément utilisées.

Composer une suite de tests en utilisant le système de fichiers

La façon probablement la plus simple d'organiser une suite de tests est de mettre tous les fichiers sources des cas de test dans un répertoire de tests. PHPUnit peut automatiquement trouver et exécuter les tests en parcourant récursivement le répertoire test.

Jetons un oeil à la suite de tests de la bibliothèque sebastianbergmann/money. En regardant la structure des répertoires du projet, nous voyons que les classes des cas de test dans le répertoire tests reflètent la structure des paquetages et des classes du système en cours de test (SCT, System Under Test ou SUT) dans le répertoire src :

src                                 tests
`-- Currency.php                    `-- CurrencyTest.php
`-- IntlFormatter.php               `-- IntlFormatterTest.php
`-- Money.php                       `-- MoneyTest.php
`-- autoload.php

Pour exécuter tous les tests de la bibliothèque, nous n'avons qu'à faire pointer le lanceur de tests en ligne de commandes de PHPUnit sur ce répertoire test :

phpunit --bootstrap src/autoload.php tests
PHPUnit 6.5.0 by Sebastian Bergmann.

.................................

Time: 636 ms, Memory: 3.50Mb

OK (33 tests, 52 assertions)

Note

Si vous pointez le lanceur de tests en ligne de commandes de PHPUnit sur un répertoire, il va chercher les fichiers *Test.php.

Pour n'exécuter que les tests déclarés dans la classe de cas de test CurrencyTest dans tests/CurrencyTest, nous pouvons utiliser la commande suivante :

phpunit --bootstrap src/autoload.php tests/CurrencyTest
PHPUnit 6.5.0 by Sebastian Bergmann.

........

Time: 280 ms, Memory: 2.75Mb

OK (8 tests, 8 assertions)

Pour un contrôle plus fin sur les tests à exécuter, nous pouvons utiliser l'option --filter :

phpunit --bootstrap src/autoload.php --filter testObjectCanBeConstructedForValidConstructorArgument tests
PHPUnit 6.5.0 by Sebastian Bergmann.

..

Time: 167 ms, Memory: 3.00Mb

OK (2 test, 2 assertions)

Note

Un inconvénient de cette approche est que nous n'avons pas de contrôle sur l'ordre dans lequel les tests sont exécutés. Ceci peut conduire à des problèmes concernant les dépendances des tests, voir la section intitulée « Dépendances des tests ». Dans la prochaine section, nous verrons comment nous pouvons rendre l'ordre d'exécution des tests explicite en utilisant le fichier de configuration XML.

Composer une suite de tests en utilisant la configuration XML

Le fichier de configuration XML de PHPUnit (Annexe C, Le fichier de configuration XML) peut aussi être utilisé pour composer une suite de tests. Exemple 5.1, « Composer une suite de tests en utilisant la configuration XML » montre un exemple minimaliste d'un fichier phpunit.xml qui va ajouter toutes les classes *Test trouvées dans les fichiers *Test.php quand tests est parcouru récursivement.

Exemple 5.1. Composer une suite de tests en utilisant la configuration XML

<phpunit bootstrap="src/autoload.php">
  <testsuites>
    <testsuite name="money">
      <directory>tests</directory>
    </testsuite>
  </testsuites>
</phpunit>


Si un fichier phpunit.xml ou phpunit.xml.dist (dans cet ordre) existe dans le répertoire de travail courant et que l'option --configuration n'est pas utilisée, la configuration sera automatiquement lue depuis ce fichier.

L'ordre dans lequel les tests sont exécutés peut être rendu explicite :

Exemple 5.2. Composer une suite de tests en utilisant la configuration XML

<phpunit bootstrap="src/autoload.php">
  <testsuites>
    <testsuite name="money">
      <file>tests/IntlFormatterTest.php</file>
      <file>tests/MoneyTest.php</file>
      <file>tests/CurrencyTest.php</file>
    </testsuite>
  </testsuites>
</phpunit>


Ouvrez un ticket sur GitHub pour proposer des améliorations à cette page. Merci!

粤公网安备 44190002002837号