Maison  >  Article  >  cadre php  >  Meilleures pratiques pour implémenter les tests unitaires dans ThinkPHP6

Meilleures pratiques pour implémenter les tests unitaires dans ThinkPHP6

王林
王林original
2023-06-21 10:31:361573parcourir

Meilleures pratiques pour la mise en œuvre des tests unitaires dans ThinkPHP6

Avec les exigences d'itération rapide et de livraison efficace dans le développement de logiciels modernes, les tests unitaires sont devenus une méthode de test automatisé indispensable. Dans le langage PHP, la popularité des frameworks de tests unitaires permet aux développeurs de ne plus avoir à tester manuellement chaque fonction et méthode, mais d'écrire des cas de test pour vérifier automatiquement l'exactitude du code. Dans ThinkPHP6, le framework de tests unitaires PHPUnit est intégré au framework par défaut et possède des fonctions assez complètes et d'excellentes performances. Cet article présentera les meilleures pratiques sur la façon de mettre en œuvre les tests unitaires dans ThinkPHP6 et partagera quelques expériences et conseils pratiques.

1. Installez le framework de tests unitaires PHPUnit

Le framework ThinkPHP6 intègre le framework de tests unitaires PHPUnit par défaut. Il suffit d'introduire des dépendances dans Composer. Lors du développement ultérieur, chaque fois que nous devons exécuter un test unitaire, il nous suffit d'exécuter la commande suivante dans le terminal :

php think test

Avant d'exécuter cette commande, nous devons nous assurer que PHP7.2 et supérieur ont été installés pour le projet. , et Composer est installé Gestionnaire de packages. Dans le terminal, accédez au répertoire racine du projet et exécutez la commande suivante pour installer PHPUnit :

composer require phpunit/phpunit

Ce n'est qu'une fois l'environnement de développement PHP et le cadre de tests unitaires PHPUnit installés avec succès que nous pouvons commencer à implémenter les tests unitaires.

2. Méthode d'écriture des tests unitaires

Les tests unitaires dépendent de divers modules du système métier et de leurs associations. Par conséquent, avant d'écrire des tests unitaires, nous devons d'abord maîtriser le code de base, les relations de modèle et les exigences commerciales du système métier. .

Dans ThinkPHP6, nous pouvons écrire des tests unitaires en créant un autre dossier appelé tests, puis en y plaçant des cas de test. Un scénario de test doit être constitué d'un ou plusieurs tests pour le code PHP, et nous pouvons écrire une classe de test pour l'implémenter.

Dans la classe de test, nous pouvons initialiser et effacer les données de test via les méthodes setUp() et tearDown(), ou nous pouvons utiliser les fonctions spécifiques fournies par PHPUnit pour affirmer ainsi la relation entre une valeur attendue et une valeur réelle. tester si notre code est conforme à la logique attendue. Ce qui suit est une classe de test simple :

<?php
use PHPUnitFrameworkTestCase;
use appmodelUser;

class UserTest extends TestCase
{
    protected $user;

    protected function setUp(): void
    {
        $this->user = new User(['name' => 'test', 'email' => 'test@test.com']);
    }

    public function testGetName()
    {
        $this->assertSame($this->user->name, 'test');
    }

    public function testGetEmail()
    {
        $this->assertSame($this->user->email, 'test@test.com');
    }

    protected function tearDown(): void
    {
        unset($this->user);
    }
}

Dans la classe de test ci-dessus, nous avons d'abord initialisé l'objet $user via la méthode setUp(), puis testé si ses variables membres $name et $email étaient correctement définies et attribuées. Une fois le test terminé, nous utilisons la méthode tearDown() pour supprimer l'objet $user de la mémoire.

3. Tests unitaires dans les applications pratiques

Dans les applications pratiques, nous devons envisager les tests unitaires des modèles et des contrôleurs de systèmes d'entreprise. Dans ThinkPHP6, nous pouvons utiliser des fonctions d'assistance pour simuler des requêtes et des réponses, et utiliser des classes d'opérations de base de données pour lire directement les données de test. Voici un exemple de scénario de test pour la classe model :

<?php
use PHPUnitFrameworkTestCase;
use appmodelGoods;

class GoodsTest extends TestCase
{
    public function testGetGoodsById()
    {
        // 模拟请求
        $request = request();
        $request->get(['id' => 1]);

        // 模拟响应
        $response = app()->http->run();
        $content = $response->getContent();

        // 断言响应是否符合预期
        $this->assertSame(
            '{"id":1,"name":"Apple iPhone 11","price":5999}',
            $content
        );
    }
}

Dans le cas de test ci-dessus, nous avons écrit une méthode de test pour simuler une requête HTTP GET via l'objet $request afin d'obtenir des informations sur le produit correspondant à l'identifiant du produit = 1. Utilisez ensuite la méthode $app->http->run() pour simuler la réponse, renvoyer les données correspondantes du serveur au cadre de tests unitaires et vérifier si la valeur de retour répond aux attentes. Si la valeur renvoyée est correcte, le test réussit, sinon le test est considéré comme échoué.

Dans le contrôleur, nous pouvons utiliser des frameworks tels que Mockery pour simuler, injecter des objets et d'autres opérations afin de tester si le contrôleur que nous avons écrit nous-mêmes répond aux attentes.

Dans les applications pratiques, nous devons également prendre en compte des problèmes tels que la couverture complète des cas de test et l'exécution efficace des suites de tests unitaires. Ces problèmes doivent être résolus en fonction des besoins de l'entreprise lors du développement réel, et des outils tiers peuvent être utilisés pour améliorer la couverture et l'efficacité des tests.

4. Résumé

Dans ThinkPHP6, la mise en œuvre des tests unitaires dépend uniquement de PHP lui-même et du framework de tests unitaires PHPUnit. Lors de la rédaction des cas de test, nous devons maîtriser le code de base, les relations de modèle et les exigences commerciales du système d'entreprise, et prendre en compte diverses situations particulières et valeurs aberrantes dans les cas de test. Dans les applications pratiques, nous devons également prendre en compte des problèmes tels que la couverture complète des cas de test et l’exécution efficace des suites de tests unitaires. En bref, les tests unitaires jouent un rôle essentiel dans la résolution des bogues dans les systèmes d'entreprise, l'amélioration de l'efficacité du développement, l'amélioration de la qualité du code et la réduction des coûts de maintenance du système.

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