Optimiser le développement PHP avec PHPUnit : Guide complet pour une première intégration

5 Juil 2024 | Développement, Open Source, PHP

L’importance des tests automatisés avec PHPUnit

Imaginez que vous avez une API web en production, sans aucun test automatisé.

Tout fonctionne bien, jusqu’au jour où vous décidez d’ajouter une nouvelle fonctionnalité. Malheureusement, cette nouvelle fonctionnalité introduit des bugs dans des parties du code qui fonctionnaient parfaitement jusqu’à présent. Vous passez des heures à essayer de comprendre ce qui a mal tourné et comment tout corriger.

C’est ici que les tests automatisés deviennent indispensables.

Pourquoi les tests sont-ils essentiels ?

Les tests automatisés sont cruciaux pour garantir la stabilité et la fiabilité de votre application. Voici quelques raisons principales :

  1. Détection rapide des bugs : Les tests permettent de détecter les bugs dès que le code est modifié.
  2. Facilite la maintenance : Avec des tests en place, il est plus facile de refactorer le code et d’ajouter de nouvelles fonctionnalités sans craindre de casser quelque chose.
  3. Documentation vivante : Les tests peuvent servir de documentation vivante, expliquant comment le code est censé fonctionner.
  4. Confiance accrue : Ils augmentent la confiance dans le déploiement de nouvelles versions.

 

 

Comment intégrer des tests avec PHPUnit ?

PHPUnit est un framework de test pour PHP, largement utilisé pour écrire des tests unitaires. Voici un guide étape par étape pour intégrer des tests à votre projet :

Installation de PHPUnit

La première étape consiste à installer PHPUnit. Si vous utilisez Composer, ajoutez-le en tant que dépendance de développement : 

    composer require --dev phpunit/phpunit

    Écrire votre premier test

    Supposons que vous avez une classe Calculator avec une méthode add

    class Calculator { public function add($a, $b) { return $a + $b; } }

    Vous pouvez écrire un test unitaire pour cette méthode comme suit :

    use PHPUnit\Framework\TestCase; class CalculatorTest extends TestCase { public function testAdd() { $calculator = new Calculator(); $result = $calculator->add(2, 3); $this->assertEquals(5, $result); } }

    Écrire un test d’intégration

    Les tests d’intégration vérifient que différents modules ou services fonctionnent bien ensemble. Par exemple, si votre Calculator interagit avec une base de données, un test d’intégration pourrait ressembler à ceci :

    use PHPUnit\Framework\TestCase; class CalculatorTest extends TestCase { public function testAdd() { $calculator = new Calculator(); $result = $calculator->add(2, 3); $this->assertEquals(5, $result); } }

    Exécuter les tests

    Pour exécuter les tests, utilisez la commande suivante :

    vendor/bin/phpunit

    PHPUnit recherchera automatiquement tous les fichiers se terminant par Test.php et exécutera les méthodes de test qu’ils contiennent.

    Les différents types de tests

    Il existe plusieurs types de tests que vous pouvez écrire :

    1. Tests unitaires : Ils testent des parties isolées du code (souvent des fonctions ou des méthodes).
    2. Tests d’intégration : Ils vérifient que différents modules ou services fonctionnent bien ensemble.
    3. Tests fonctionnels : Ils testent l’application entière, en simulant les interactions de l’utilisateur.

    Intégration des tests dans un flux de développement

    Pour illustrer un flux de développement complet, voici un exemple typique :

    1. Écriture de la fonctionnalité et test interactif par le développeur : Utilisation du navigateur, de Postman ou de la ligne de commande selon la fonctionnalité développée.
    2. Écriture des tests automatisés : Créez des tests unitaires, d’intégration et fonctionnels pour la nouvelle fonctionnalité.
    3. Lancement des tests automatisés : Assurez-vous que tous les tests passent avant de continuer.
    4. Merge Request (MR) ou demande d’intégration du code : Cela déclenche automatiquement les tests de l’application via la plateforme choisie (GitLab, GitHub, etc.).
    5. Acceptation de la MR : Les tests sont rejoués automatiquement sur le code fusionné pour valider la compatibilité.

    Automatisation avec CI/CD

    Pour automatiser les tests, vous pouvez utiliser des options CI/CD disponibles sur GitLab :

    1. GitLab CI/CD : Créez un fichier .gitlab-ci.yml pour définir votre pipeline de tests. Par exemple :

     

    stages: - test test_job: stage: test script: - composer install - vendor/bin/phpunit
    1. GitHub Actions : Vous pouvez également utiliser GitHub Actions avec un fichier de workflow similaire.
    2. Jenkins : Configurez Jenkins pour exécuter les tests à chaque commit.

    Intégration dans les IDE de développement

    Il existe des intégrations possibles dans les IDE pour faciliter l’écriture et l’exécution des tests :

    • VSCode : Utilisez l’extension PHPUnit pour exécuter les tests directement depuis l’éditeur.
    • PHPStorm : PHPStorm intègre nativement PHPUnit, permettant d’exécuter les tests et de voir les résultats dans l’IDE.
    • Ouvrir les Préférences :

      • Allez dans File > Settings (ou PHPStorm > Preferences sur macOS).
    • Configurer PHPUnit :

      • Allez dans Languages & Frameworks > PHP > Test Frameworks.
      • Cliquez sur le signe + pour ajouter une nouvelle configuration PHPUnit.
      • Sélectionnez PHPUnit by Composer autoload.
      • Spécifiez le chemin vers votre fichier autoload.php. En général, il se trouve dans vendor/autoload.php.
    • Configurer l’Interpréteur PHP :

      • Assurez-vous que l’interpréteur PHP est correctement configuré sous Languages & Frameworks > PHP.
      • Ajoutez un nouvel interpréteur si nécessaire et pointez-le vers l’exécutable PHP sur votre machine.

    Configurer l’Exécution Automatique des Tests

    1. Configurer une Configuration de Lancement :
      • Allez dans Run > Edit Configurations.
      • Cliquez sur le signe + et sélectionnez PHPUnit.
      • Donnez un nom à cette configuration, par exemple All Tests.
      • Sélectionnez le répertoire contenant tous vos tests ou un fichier de test spécifique.
    2. Exécuter Tous les Tests :
      • Cliquez sur la configuration de lancement que vous venez de créer et sélectionnez Run 'All Tests'.
      • PHPStorm exécutera tous les tests et affichera les résultats dans la fenêtre des tests.

    Conclusion

    Intégrer des tests à votre processus de développement est une étape cruciale pour assurer la qualité et la fiabilité de votre application. Avec PHPUnit, vous disposez d’un outil puissant et flexible pour écrire et exécuter vos tests. Commencez dès aujourd’hui, et vous verrez rapidement les bénéfices en termes de temps et de tranquillité d’esprit.