Je commencerai par établir un lien avec le manuel, puis j'aborderai ce que j'ai vu et entendu sur le terrain.
Organisation des suites de tests phpunit
Module / Test de l'organisation des dossiers dans le système de fichiers
L'approche que je recommande est de combiner le système de fichiers avec une configuration xml.
tests/
\ unit/
| - module1
| - module2
- integration/
- functional/
avec un phpunit.xml
avec un simple :
<testsuites>
<testsuite name="My whole project">
<directory>tests</directory>
</testsuite>
</testsuites>
vous pouvez diviser les testuites si vous le souhaitez mais c'est un choix de projet à projet.
Running phpunit
exécutera ensuite TOUS les tests et l'exécution phpunit tests/unit/module1
exécutera tous les tests du module1.
Organisation du dossier "unité
L'approche la plus courante ici est de refléter votre source/
dans la structure des répertoires de votre tests/unit/
structure du dossier.
Vous avez une TestClass par ProductionClass de toute façon, donc c'est une bonne approche dans mon livre.
Dans l'organisation des fichiers
Cela ne fonctionnera pas de toute façon si vous avez plus d'une classe de test dans un fichier, alors évitez ce piège.
- Ne pas avoir d'espace de nom de test
Cela rend juste l'écriture du test plus verbeuse car vous avez besoin d'une déclaration d'utilisation supplémentaire. Je dirais que la classe de test devrait être dans le même espace de noms que la classe de production mais ce n'est pas quelque chose que PHPUnit vous oblige à faire. J'ai juste trouvé que c'était plus facile et sans inconvénient.
Exécution de quelques tests seulement
Par exemple phpunit --filter Factory
exécute tous les FactoryTests pendant que phpunit tests/unit/logger/
exécute tout ce qui concerne la journalisation.
Vous pouvez utiliser @group
pour des numéros de numéros, des histoires ou autres, mais pour les "modules", j'utiliserais la disposition en dossiers.
Fichiers xml multiples
Il peut être utile de créer plusieurs fichiers xml si vous souhaitez en avoir :
- un sans couverture de code
- un seul pour les tests unitaires (mais pas pour les tests fonctionnels ou d'intégration ou les tests de longue durée)
- autres cas courants de "filtres
- PHPBB3, par exemple, le fait pour
their phpunit.xmls
Couverture de code pour vos tests
Comme il est lié au démarrage d'un nouveau projet avec des tests :
- Ma suggestion est d'utiliser
@covers
tags comme décrit dans mon blog (Seulement pour les tests unitaires, toujours couvrir toutes les fonctions non publiques, toujours utiliser les balises de couverture.
- Ne générez pas de couverture pour vos tests d'intégration. Cela vous donne un faux sentiment de sécurité.
- Utilisez toujours la liste blanche pour inclure tout votre code de production afin que les chiffres ne vous mentent pas !
Autochargement et amorçage de vos tests
Vous n'avez pas besoin d'une sorte de chargement automatique pour vos tests. PHPUnit s'en chargera.
Utilisez le <phpunit bootstrap="file">
pour spécifier votre test bootstrap. tests/bootstrap.php
est un bon endroit pour le mettre. Vous pouvez y configurer l'autoloader de vos applications et ainsi de suite (ou appeler vos applications "bootstrap").
Résumé
- Utilisez la configuration xml pour à peu près tout
- Séparation des tests unitaires et d'intégration
- Les dossiers de vos tests unitaires doivent refléter la structure des dossiers de vos applications.
- Pour n'exécuter que des tests spécifiques, utilisez
phpunit --filter
ou phpunit tests/unit/module1
- Utilisez le
strict
dès le départ et ne jamais l'éteindre.
Exemples de projets à examiner