Phpunit Manual Version Latest
Total Page:16
File Type:pdf, Size:1020Kb
PHPUnit Manual Version latest Sebastian Bergmann sept. 07, 2021 Table des matières 1 Installer PHPUnit 3 1.1 Pré-requis.................................................3 1.2 PHP Archive (PHAR)..........................................3 1.2.1 Windows............................................4 1.2.2 Vérification des versions PHAR de PHPUnit.........................4 1.3 Composer.................................................6 1.4 Paquets optionnels............................................6 2 Écrire des tests pour PHPUnit9 2.1 Dépendances des tests.......................................... 10 2.2 Fournisseur de données......................................... 13 2.3 Tester des exceptions........................................... 18 2.4 Tester les erreurs PHP.......................................... 19 2.5 Tester la sortie écran........................................... 21 2.6 Sortie d’erreur.............................................. 22 2.6.1 Cas limite............................................ 24 3 Lanceur de tests en ligne de commandes 27 3.1 Options de la ligne de commandes.................................... 28 3.2 TestDox.................................................. 34 4 Fixtures 35 4.1 Plus de setUp() que de tearDown().................................... 38 4.2 Variantes................................................. 38 4.3 Partager les Fixtures........................................... 38 4.4 Etat global................................................ 39 5 Organiser les tests 41 5.1 Composer une suite de tests en utilisant le système de fichiers..................... 41 5.2 Composer une suite de tests en utilisant la configuration XML..................... 42 6 Tests risqués 45 6.1 Tests inutiles............................................... 45 6.2 Code non-intentionnellement couvert.................................. 45 6.3 Sortie d’écran lors de l’exécution d’un test............................... 45 6.4 Délai d’exécution des tests........................................ 46 6.5 Manipulation d’états globaux...................................... 46 i 7 Tests incomplets et sautés 47 7.1 Tests incomplets............................................. 47 7.2 Sauter des tests.............................................. 48 7.3 Sauter des tests en utilisant @requires.................................. 49 8 Tester des bases de données 51 8.1 Systèmes gérés pour tester des bases de données............................ 51 8.2 Difficultés pour tester les bases de données............................... 52 8.3 Les quatre phases d’un test de base de données............................. 52 8.3.1 1. Nettoyer la base de données................................. 53 8.3.2 2. Configurer les fixtures.................................... 53 8.3.3 3–5. Exécuter les tests, vérifier les résultats et nettoyer.................... 53 8.4 Configuration d’un cas de test de base de données PHPUnit...................... 53 8.4.1 Implémenter getConnection().................................. 54 8.4.2 Implémenter getDataSet()................................... 54 8.4.3 Qu’en est-il du schéma de base de données (DDL)?...................... 54 8.4.4 Astuce : utilisez votre propre cas de tests abstrait de base de données............. 55 8.5 Comprendre DataSets et DataTables................................... 56 8.5.1 Implémentations disponibles.................................. 57 8.5.2 Attention aux clefs étrangères................................. 66 8.5.3 Implémenter vos propres DataSets/DataTables......................... 66 8.6 Utiliser l’API de connexion à la base de données............................ 67 8.7 API d’assertion de base de données................................... 69 8.7.1 Faire une assertion sur le nombre de lignes d’une table.................... 69 8.7.2 Faire une assertion sur l’état d’une table............................ 69 8.7.3 Faire une assertion sur le résultat d’une requête........................ 71 8.7.4 Faire une assertion sur l’état de plusieurs tables........................ 71 8.8 Foire aux questions............................................ 72 8.8.1 PHPUnit va-t’il (re-)créer le schéma de base de données pour chaque test?.......... 72 8.8.2 Suis-je obligé d’utiliser PDO dans mon application pour que l’extension de base de données fonctionne?........................................... 72 8.8.3 Que puis-je faire quand j’obtiens une erreur “Too much Connections (Trop de connexions)“? 72 8.8.4 Comment gérer les valeurs NULL avec les DataSets au format XML à plat / CSV?..... 72 9 Doublure de test 73 9.1 Bouchons................................................. 74 9.2 Objets Mock............................................... 78 9.3 Prophecy................................................. 84 9.4 Mocker les Traits et les classes abstraites................................ 85 9.5 Bouchon et mock pour Web Services.................................. 86 9.6 Simuler le système de fichiers...................................... 87 10 Analyse de couverture de code 91 10.1 Indicateurs logiciels pour la couverture de code............................. 92 10.2 Liste blanche de fichiers......................................... 92 10.3 Ignorer des blocs de code........................................ 93 10.4 Spécifier les méthodes couvertes..................................... 94 10.5 Cas limites................................................ 96 11 Journalisation 97 11.1 Résultats de test (XML)......................................... 97 11.2 Couverture de code (XML)....................................... 98 11.3 Couverture de code (TEXTE)...................................... 99 12 Etendre PHPUnit 101 ii 12.1 Sous-classe PHPUnit\Framework\TestCase............................... 101 12.2 Ecrire des assertions personnalisées................................... 101 12.3 Implémenter PHPUnit\Framework\TestListener............................. 103 12.4 Implémenter PHPUnit\Framework\Test................................. 104 12.5 Etendre le TestRunner.......................................... 106 12.5.1 Interfaces disponibles...................................... 106 13 Assertions 109 13.1 De l’utilisation Statique vs. Non-Statique des méthodes d’assertion.................. 109 13.2 assertArrayHasKey()........................................... 109 13.3 assertClassHasAttribute()........................................ 110 13.4 assertArraySubset()........................................... 111 13.5 assertClassHasStaticAttribute()..................................... 112 13.6 assertContains()............................................. 112 13.7 assertContainsOnly()........................................... 114 13.8 assertContainsOnlyInstancesOf().................................... 115 13.9 assertCount()............................................... 116 13.10 assertDirectoryExists().......................................... 117 13.11 assertDirectoryIsReadable()....................................... 117 13.12 assertDirectoryIsWritable()....................................... 118 13.13 assertEmpty()............................................... 119 13.14 assertEqualXMLStructure()....................................... 120 13.15 assertEquals().............................................. 121 13.16 assertFalse()............................................... 126 13.17 assertFileEquals()............................................ 127 13.18 assertFileExists()............................................. 128 13.19 assertFileIsReadable().......................................... 128 13.20 assertFileIsWritable().......................................... 129 13.21 assertGreaterThan()........................................... 130 13.22 assertGreaterThanOrEqual()....................................... 130 13.23 assertInfinite().............................................. 131 13.24 assertInstanceOf()............................................ 132 13.25 assertInternalType()........................................... 133 13.26 assertIsReadable()............................................ 133 13.27 assertIsWritable()............................................ 134 13.28 assertJsonFileEqualsJsonFile()...................................... 135 13.29 assertJsonStringEqualsJsonFile().................................... 135 13.30 assertJsonStringEqualsJsonString()................................... 136 13.31 assertLessThan()............................................. 137 13.32 assertLessThanOrEqual()........................................ 138 13.33 assertNan()................................................ 139 13.34 assertNull()................................................ 139 13.35 assertObjectHasAttribute()........................................ 140 13.36 assertRegExp().............................................. 141 13.37 assertStringMatchesFormat()...................................... 141 13.38 assertStringMatchesFormatFile().................................... 142 13.39 assertSame()............................................... 143 13.40 assertStringEndsWith().......................................... 144 13.41 assertStringEqualsFile()......................................... 145 13.42 assertStringStartsWith()......................................... 146 13.43 assertThat()................................................ 147 13.44 assertTrue()................................................ 148 13.45 assertXmlFileEqualsXmlFile()...................................... 149 13.46 assertXmlStringEqualsXmlFile()...................................