Maison  >  Article  >  développement back-end  >  Développement PHP : tests automatisés avec PHPUnit

Développement PHP : tests automatisés avec PHPUnit

PHPz
PHPzoriginal
2023-06-15 20:35:301513parcourir

Avec le développement rapide du développement logiciel, les tests automatisés sont devenus une méthode de test de plus en plus populaire. Les tests automatisés peuvent aider les développeurs à tester plus rapidement et à couvrir différents scénarios de test et cas d'utilisation de manière plus complète. Le développement PHP ne fait pas exception, PHPUnit est l'un des outils de tests automatisés les plus populaires pour le développement PHP. Cet article explique comment utiliser PHPUnit pour implémenter des tests automatisés.

1. Introduction à PHPUnit

PHPUnit est un framework de test PHP populaire développé par Sebastian Bergmann. Il offre aux développeurs PHP un moyen simple, rapide et fiable d'écrire et d'exécuter des tests unitaires. PHPUnit prend en charge les approches de développement piloté par les tests (TDD) et de développement piloté par le comportement (BDD).

2. Installez PHPUnit

Avant d'utiliser PHPUnit, vous devez vous assurer que PHP et Composer ont été installés. Ouvrez une fenêtre de terminal ou de ligne de commande et utilisez la commande suivante pour installer PHPUnit et les composants dont dépend PHPUnit :

composer require --dev phpunit/phpunit

Après une installation réussie, vous pouvez exécuter la commande suivante pour vérifier la version de PHPUnit :

./vendor/bin/phpunit --version

3.

Avant d'utiliser PHPUnit, vous devez écrire des cas de test. Un scénario de test se compose généralement de trois parties :

  1. Préparer les données et les objets requis pour le test
  2. Exécuter la méthode de test
  3. Déclarer si les résultats du test sont comme prévu

Voici un exemple de cas de test :

<?php

use PHPUnitFrameworkTestCase;

class MyMathTest extends TestCase
{
    public function testAddition()
    {
        $myMath = new MyMath();
        $result = $myMath->add(2, 2);
        $this->assertEquals(4, $result);
    }
}

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

Dans le cas de test ci-dessus, nous avons créé une classe de test appelée MyMathTest, qui hérite de la classe TestCase de PHPUnit. La méthode testAddition() effectue un calcul d'addition et vérifie si le résultat est égal au résultat attendu. Dans la classe MyMath, nous définissons une méthode add() pour effectuer des opérations d'addition.

4. Exécuter le scénario de test

Après avoir terminé l'écriture du scénario de test, vous pouvez utiliser la commande suivante pour exécuter le test :

./vendor/bin/phpunit MyMathTest.php

Une fois l'exécution terminée, PHPUnit affichera les résultats du test. Si un scénario de test échoue, PHPUnit affichera des informations détaillées sur l'échec pour permettre aux développeurs de localiser rapidement le problème.

5. Utiliser un fournisseur de données

Parfois, nous devons exécuter plusieurs ensembles de données de test pour tester une méthode. PHPunit fournit un mécanisme de fournisseur de données qui nous permet d'écrire de tels cas de test plus facilement. Voici un exemple :

<?php

use PHPUnitFrameworkTestCase;

class MyMathTest extends TestCase
{
    /**
     * @dataProvider additionDataProvider
     */
    public function testAddition($a, $b, $expected)
    {
        $myMath = new MyMath();
        $result = $myMath->add($a, $b);
        $this->assertEquals($expected, $result);
    }

    public function additionDataProvider() {
        return [
            [1, 2, 3],
            [0, 0, 0],
            [-1, -1, -2],
        ];
    }
}

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

Dans le cas de test ci-dessus, nous avons utilisé l'annotation @DataProvider, qui indique à PHPunit de fournir les données de test en utilisant la méthode additionDataProvider(). Cette méthode renvoie un tableau contenant plusieurs ensembles de données de test. Chaque ensemble de données de test contient deux opérandes et le résultat de calcul attendu. Dans la méthode testAddition(), nous pouvons utiliser les données de test fournies en utilisant $dataProvider.

6. Utiliser des objets Mock

Lors de l'écriture de cas de test, nous devons parfois simuler un objet. Dans ce cas, nous pouvons utiliser l'objet Mock fourni par PHPUnit. Un objet Mock peut simuler un objet ou une interface et renvoyer une valeur prédéfinie lorsque ses méthodes sont appelées.

Ce qui suit est un exemple :

<?php

use PHPUnitFrameworkTestCase;

class MyDatabaseTest extends TestCase
{
    public function testInsert()
    {
        $mock = $this->getMockBuilder('Database')
                     ->getMock();

        $mock->expects($this->once())
             ->method('insert')
             ->will($this->returnValue(true));

        $myDatabase = new MyDatabase($mock);
        $result = $myDatabase->insert('username', '123456');
        $this->assertTrue($result);
    }
}

class MyDatabase {
    private $database;

    public function __construct($database) {
        $this->database = $database;
    }

    public function insert($username, $password)
    {
        return $this->database->insert('users', [
            'username' => $username,
            'password' => md5($password),
        ]);
    }
}

class Database {
    public function insert($table, $data) {
        // Insert data into the database
    }
}

Dans le cas de test ci-dessus, nous utilisons la méthode getMockBuilder() pour créer un objet Mock de la classe Database et spécifier le comportement de l'objet Mock. Dans la méthode testInsert(), nous créons un objet MyDatabase et passons l'objet Mock dans l'objet MyDatabase via le constructeur. Dans la méthode insert() de MyDatabase, nous appelons la méthode insert() de l'objet Mock.

Résumé

Lors de l'utilisation de PHPUnit pour des tests automatisés, il est recommandé de suivre d'abord le processus d'écriture du code de test, puis d'écrire le code d'implémentation pour améliorer la couverture des tests. Lors de la rédaction de cas de test, vous devez couvrir autant de scénarios et de cas d'utilisation que possible. Dans le même temps, vous pouvez également utiliser des fonctions telles que les fournisseurs de données et les objets Mock pour optimiser les cas de test et améliorer l'efficacité des tests.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn