Maison  >  Article  >  cadre php  >  Tests unitaires avec Laravel : garantir la stabilité et la qualité du code

Tests unitaires avec Laravel : garantir la stabilité et la qualité du code

WBOY
WBOYoriginal
2023-08-12 22:33:061732parcourir

Tests unitaires avec Laravel : garantir la stabilité et la qualité du code

Tests unitaires avec Laravel : assurer la stabilité et la qualité du code

Introduction :
Dans le processus de développement logiciel, les tests unitaires sont une méthode de test logiciel très importante qui peut être utilisée pour garantir la stabilité et la qualité du code. Laravel est un framework PHP populaire qui fournit de puissants outils de tests unitaires, permettant aux développeurs d'écrire et d'exécuter facilement des tests unitaires. Cet article expliquera comment utiliser Laravel pour les tests unitaires afin de garantir l'exactitude du code dans différents scénarios.

1. Pourquoi utiliser les tests unitaires
Les tests unitaires sont une méthode de test qui vérifie la plus petite unité testable dans un système logiciel. Ces unités minimales peuvent être une fonction, une classe ou des blocs de code plus petits. L'utilisation de tests unitaires peut effectuer efficacement un « développement piloté par les tests », c'est-à-dire écrire des cas de test avant le codage et garantir que le code correspondant est implémenté après la réussite des cas de test. Cela garantit la stabilité et la qualité du code et réduit le coût de découverte et de correction ultérieure des bogues.

2. Outil de test unitaire Laravel
Laravel fournit une multitude d'outils de test unitaire, notamment le cadre de test PHPUnit, les classes de cas de test et les méthodes d'assertion, etc. Parmi eux, PHPUnit est un framework de test puissant qui peut être utilisé pour écrire différents types de cas de test.

3. Écrire des cas de test
Dans Laravel, les classes de cas de test sont généralement stockées dans le répertoire tests, et plusieurs classes de cas de test différentes peuvent être créées pour tester différentes fonctions. Voici un exemple simple :

namespace TestsUnit;

use TestsTestCase;
use AppModelsUser;

class UserTest extends TestCase
{
    /**
     * 测试用户是否可以创建成功
     */
    public function testCreateUser()
    {
        $user = User::create([
            'name' => 'John Doe',
            'email' => 'john.doe@example.com',
            'password' => 'password',
        ]);

        $this->assertInstanceOf(User::class, $user);
        $this->assertEquals('John Doe', $user->name);
        $this->assertEquals('john.doe@example.com', $user->email);
    }

    /**
     * 测试用户名是否必填
     */
    public function testRequiredName()
    {
        $this->expectException(Exception::class);
        
        $user = User::create([
            'email' => 'john.doe@example.com',
            'password' => 'password',
        ]);
    }

    // 其他测试方法...
}

Dans l'exemple ci-dessus, nous avons créé une classe UserTest qui hérite de la classe TestCase. Dans cette classe, nous pouvons écrire diverses méthodes de test pour différentes fonctionnalités. Dans la première méthode de test, nous créons un utilisateur, puis utilisons des méthodes d'assertion pour vérifier que les attributs de l'utilisateur sont corrects. Dans la deuxième méthode de test, nous avons intentionnellement omis le champ de nom requis, puis avons utilisé la méthode expectException pour intercepter l'exception attendue.

4. Exécuter le scénario de test
Après avoir écrit le scénario de test, nous pouvons utiliser la commande suivante pour exécuter le test unitaire :

php artisan test

Après avoir exécuté la commande, Laravel appellera automatiquement PHPUnit pour exécuter le scénario de test et afficher les résultats du test. . Les résultats du test afficheront des informations telles que les résultats d'exécution et le taux de réussite de chaque méthode de test.

5. Utiliser des objets simulés pour l'injection de dépendances
Dans certains cas, nous devons simuler les objets dépendants de la classe testée afin de mieux contrôler l'environnement de test. Dans Laravel, vous pouvez utiliser Mockery pour créer et gérer des objets Mock. Voici un exemple simple :

use TestsTestCase;
use AppServicesPaymentService;
use AppRepositoriesOrderRepository;
use AppModelsOrder;

class OrderTest extends TestCase
{
    /**
     * 测试支付订单
     */
    public function testPayOrder()
    {
        // 创建Mock对象
        $paymentService = Mockery::mock(PaymentService::class);
        $orderRepository = Mockery::mock(OrderRepository::class);
        
        // 设置Mock对象的返回值
        $paymentService->shouldReceive('pay')->andReturn(true);
        $orderRepository->shouldReceive('findById')->andReturn(new Order());
        
        // 将Mock对象注入到被测类中
        $order = new Order($paymentService, $orderRepository);
        
        // 执行被测方法
        $result = $order->pay();
        
        // 断言结果
        $this->assertTrue($result);
    }
    
    // 其他测试方法...
}

Dans l'exemple ci-dessus, nous avons utilisé Mockery pour créer deux objets Mock et définir respectivement les valeurs de retour attendues pour eux. Ensuite, nous avons injecté ces deux objets Mock dans la classe testée et appelé la méthode testée. Enfin, nous utilisons la méthode d'assertion pour vérifier que les résultats renvoyés sont corrects.

Conclusion :
En utilisant les outils de tests unitaires fournis par Laravel, nous pouvons facilement écrire et exécuter différents types de cas de test pour garantir l'exactitude et la stabilité de notre code dans différents environnements. Les tests unitaires sont un moyen important d'améliorer la qualité du code et l'efficacité du développement, et méritent notre attention et notre utilisation dans le développement quotidien. J'espère que cet article pourra vous apporter de l'inspiration et vous aider à utiliser Laravel pour les tests unitaires.

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