Jusqu'à présent, nous n'avons que deux tests pour Array et la fonction intégrée sizeof(). Lorsque nous commençons à tester un grand nombre de fonctions array_*(), nous avons besoin d'un test pour chacune d'elles. Nous pouvons écrire chacun à partir de zéro. Cependant, une meilleure approche consiste à écrire l’infrastructure de test une seule fois, puis à écrire uniquement les différentes parties de chaque test. PHPUnit est une telle infrastructure.
L'exemple 5 montre comment réécrire les deux tests de l'exemple 4 à l'aide de PHPUnit.
Exemple 5. Testez Array et sizeof() avec PHPUnit
<?php
.
require_once 'PHPUnit2/Framework/TestCase.php';
la classe ArrayTest étend PHPUnit2_Framework_TestCase {
fonction publique testNewArrayIsEmpty( ) {
//Créer un appareil de tableau.
$fixture = Tableau( );
// Affirme que la taille du luminaire du tableau est 0.
$this->assertEquals(0, sizeof($fixture));
}
fonction publique testArrayContainsAnElement( ) {
//Créer un appareil de tableau.
$fixture = Array( );
// Ajoute un membre au luminaire du tableau.
$fixture[] = 'Élément';
// Affirmer que la taille du luminaire du tableau est 1.
$this->assertEquals(1, sizeof($fixture));
}
}
?>
L'exemple 5 nous indique les étapes de base pour utiliser PHPUnit pour écrire des tests :
1. La classe de test pour la classe Class est ClassTest.
2. ClassTest hérite généralement de PHPUnit2_ Framework_TestCase.
3. Test est une méthode publique sans paramètres et son nom est test*.
4. Dans la méthode de test, des fonctions d'assertion telles que assertEquals() (voir Tableau 6) sont utilisées pour affirmer si la valeur réelle correspond à la valeur attendue.
Un framework comme PHPUnit doit résoudre un certain nombre de problèmes, dont certains semblent entrer en conflit les uns avec les autres. Les tests doivent également remplir les conditions suivantes :
Facile à apprendre
Les tests doivent être faciles à apprendre, sinon les développeurs n'apprendront pas.
Facile à développer.
Les tests doivent être faciles à développer, sinon les développeurs ne développeront pas.
Facile à lire.
Le code du test ne doit avoir aucune relation externe. , afin que le test lui-même ne se perde pas dans le désordre.
Facile à exécuter
Les tests doivent être faciles à exécuter et les résultats de leur exécution doivent être exprimés dans un format clair et sans ambiguïté.
Exécution rapide
Les tests doivent être exécutés rapidement afin de pouvoir être exécutés des milliers de fois par jour.
Les testsd'isolation de code
ne peuvent pas s'influencer mutuellement et les modifications apportées à l'ordre des tests ne doivent pas affecter les résultats.
Composable
Nous devrions pouvoir exécuter des tests dans n'importe quelle combinaison, ce qui est un corollaire de l'isolation du code.
Il existe deux conflits principaux entre ces contraintes :
Facilité d'apprentissage vs Facilité de développement
Les tests ne nécessitent généralement pas toute la flexibilité de la programmation. De nombreux outils de test fournissent leurs propres langages de script de test. Ces langages ne disposent que du minimum de fonctionnalités nécessaires pour écrire des tests. Puisqu'il n'y a aucun bruit susceptible d'interférer avec le contenu de votre test, les tests écrits sont faciles à lire et à écrire. Mais apprendre un nouveau courrier à tricoter et un ensemble d'outils reste peu pratique et prête à confusion.
Isolation du code ou exécution rapide
Si vous souhaitez que les résultats d'un test n'en affectent pas un autre, vous devez créer une rubrique complète pour le test au début de chaque test, puis restaurer l'état avant de l'exécuter. Cependant, la configuration de l'état prend beaucoup de temps (par exemple, connexion à la base de données et initialisation à un état connu avec des données réelles).
La solution de PHPUnit à ce problème consiste à utiliser PHP comme langage de test. Parfois, PHP complet est trop puissant pour écrire des tests courts et simples, mais les programmeurs que nous utilisons ont déjà une expérience complète de PHP. Parce que nous devons convaincre les testeurs réticents, il est extrêmement important de réduire les obstacles à la rédaction de ces premiers tests.