Maison > Article > développement back-end > Comment utiliser PHPUnit pour l'analyse de couverture de test simulé dans le développement PHP
Ces dernières années, avec la popularité du développement PHP, PHPUnit est devenu l'un des outils essentiels permettant aux développeurs d'effectuer des tests unitaires et des tests d'intégration. PHPUnit fournit aux développeurs un ensemble complet d'outils de test, y compris l'analyse de la couverture des tests. Cet article explique comment utiliser PHPUnit pour les tests simulés et l'analyse de la couverture des tests dans le développement PHP.
1. Qu'est-ce qu'un test simulé ?
Les tests simulés sont une méthode de test utilisée pour tester le comportement de certains composants du programme testé. Dans les tests simulés, certaines fonctions ou objets du programme testé sont simulés pour simuler la situation dans l'environnement de test réel. Grâce aux tests simulés, les développeurs peuvent simuler le comportement réel du programme, réduisant ainsi les coûts des tests et améliorant la qualité des tests.
Lors de l'exécution de tests simulés dans PHPUnit, les objets simulés sont généralement utilisés pour remplacer certains des objets ou fonctions d'origine du programme. Un objet Mock est un objet simulé qui possède la même interface que l'objet d'origine, mais il peut simuler certains modèles de comportement et renvoyer les résultats de l'objet d'origine lorsqu'il est réellement en cours d'exécution. Dans PHPUnit, nous pouvons utiliser la classe PHPUnit_Framework_MockObject pour générer des objets Mock pour les objets testés afin d'effectuer des tests traditionnels et une analyse de couverture de leur comportement.
2. Étapes pour utiliser PHPUnit pour les tests simulés
Tout d'abord, vous devez installer PHPUnit dans l'environnement de développement. Vous pouvez installer PHPUnit via Composer ou télécharger le package phar PHPUnit. Les étapes d'installation spécifiques sont les suivantes :
composer require phpunit/phpunit --dev
wget https://phar.phpunit.de/phpunit.phar chmod +x phpunit.phar
Lorsque vous utilisez PHPUnit pour les tests, vous devez être dans le répertoire racine de la bibliothèque de codes. Créez un répertoire de tests, puis créez un fichier dans le répertoire qui est le même que le fichier programme et ajoutez le suffixe Test après le nom du fichier pour indiquer qu'il s'agit d'un fichier de test. . Par exemple, si vous souhaitez tester une classe PHP nommée UserService, le fichier de test s'appellera UserServiceTest.php.
Dans le fichier de test, nous devons écrire une classe de cas de test qui hérite de la classe PHPUnit_Framework_TestCase et implémente les méthodes qui doivent être testées. Chaque méthode de test dans une classe de scénario de test doit utiliser la méthode assert() pour tester si la sortie de la méthode de l'objet est correcte. Par exemple :
class UserServiceTest extends PHPUnit_Framework_TestCase { public function testSignup() { $userService = new UserService(); $this->assertTrue($userService->signup('user1', 'password1')); } }
Dans un cas de test, vous devrez peut-être vous moquer de certaines méthodes ou propriétés d'une classe pour simuler un certain scénario. Dans PHPUnit, vous pouvez utiliser la classe PHPUnit_Framework_MockObject pour générer des objets Mock. L'objet Mock simule le comportement de l'objet d'origine. Nous pouvons tester le code testé en appelant la méthode de l'objet Mock dans la méthode de test.
Par exemple, nous voulons tester la méthode getUser() de UserService. La classe UserService dépend d'une instance de la classe UserDao. Nous pouvons utiliser PHPUnit_Framework_MockObject pour produire un objet UserDao Mock lorsque l'utilisateur n'est pas connecté, et l'injecter. dans le UserService. Test :
class UserServiceTest extends PHPUnit_Framework_TestCase { public function testGetUserWhenNotLoggedIn() { $userDaoMock = $this->getMockBuilder(UserDao::class) ->disableOriginalConstructor() ->getMock(); $userService = new UserService($userDaoMock); $this->assertNull($userService->getUser()); } }
Dans l'exemple ci-dessus, nous utilisons d'abord la classe PHPUnit_Framework_MockObject pour obtenir l'objet Mock de UserDao, puis transmettons l'objet Mock lors de la construction d'une instance de la classe UserService.
Après avoir écrit le scénario de test et construit l'objet Mock, nous pouvons utiliser PHPUnit pour exécuter le test. La méthode d'exécution du test est très simple, il suffit de l'exécuter en ligne de commande :
./vendor/bin/phpunit
Pour un fichier de test séparé, vous pouvez directement spécifier le nom du fichier :
./vendor/bin/phpunit tests/UserServiceTest.php
Après avoir exécuté le test , PHPUnit affichera les résultats de l'exécution du test, y compris le temps d'exécution, les résultats de l'exécution, la couverture et d'autres informations sur chaque méthode de test. Parmi ces informations, les informations de couverture peuvent nous indiquer quel code est couvert par le test et quel code ne l'est pas. Les informations de couverture sont généralement générées sous forme de code XML, HTML, Clover ou PHP. Vous pouvez choisir différents formats en fonction de vos besoins :
./vendor/bin/phpunit --coverage-clover=/path/to/coverage/report.xml
./vendor/bin/phpunit --coverage-html=/path/to/coverage/report/
./vendor/bin/phpunit --coverage-clover=/path/to/coverage/report.xml
./vendor/bin/phpunit --coverage-php=/path/to/coverage/report/coverage.php
3. Résumé
Les tests simulés sont une technologie de test très importante et sont largement utilisés dans le développement de logiciels. PHPUnit est l'un des frameworks de tests unitaires les plus couramment utilisés dans le développement PHP et peut fournir aux programmeurs PHP des outils de test complets, notamment des objets simulés et une analyse de couverture de test. Les tests simulés via PHPUnit peuvent simuler la situation dans l'environnement de test réel, améliorant ainsi l'efficacité et la qualité des tests, et garantissant la fiabilité et la stabilité du code.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!