Salut l'ami développeur Laravel !

C'est super que tu veuilles te plonger dans les tests unitaires. C'est une compétence essentielle pour écrire du code de qualité, robuste et maintenable. En tant que ton inst
ructeur Laravel, je vais te guider pas à pas à travers cette leçon. Accroche-toi, on va devenir des pros du test !


📜 Leçon sur les Tests Unitaires dans Laravel

🛠️ Qu'est-ce qu'un Test Unitaire ?

Imagine que tu construis une maison avec des briques LEGO. Un test unitaire, c'est comme vérifier individuellement chaque brique pour s'assurer qu'elle est de la bonne forme, de la bonne couleur et qu'elle s'emboîte correctement.

Dans le monde du développement, une "brique" représente la plus petite unité de code testable : une fonction, une méthode dans une classe, etc. L'objectif est de tester chaque partie de manière isolée.

🔄 Pourquoi les Tests Unitaires sont-ils Importants ?

  • Détection précoce des erreurs : Débuguer plus tôt, c'est corriger plus facilement.
  • Amélioration de la qualité du code : Rendre le code plus modulaire et maintenable.
  • Facilitation de la refactorisation : Modifier le code sans stress.
  • Documentation vivante : Les tests montrent comment le code fonctionne.
  • Confiance et productivité : Déployer avec plus de sérénité.

🎉 Les Tests Unitaires dans Laravel

Laravel prend en charge PHPUnit, un framework de test populaire.

📚 Structure des Tests

Les tests unitaires sont situés dans tests/Unit. Chaque fichier de test correspond à une classe ou fonctionnalité et porte le suffixe Test.php.

Exemple :

  • Calculator.phpCalculatorTest.php

📝 Écrire un Test Unitaire de Base

  1. Créer un fichier de test :
php artisan make:test CalculatorTest --unit
  1. Définir la classe de test :
namespace Tests\Unit;
   use PHPUnit\Framework\TestCase;
   class CalculatorTest extends TestCase
   {
       public function testAddition()
       {
           $calculator = new \App\Services\Calculator();
           $result = $calculator->add(2, 3);
           $this->assertEquals(5, $result);
       }
   }
  1. Utiliser les assertions :
$this->assertEquals(5, $result);
   $this->assertTrue($condition);
   $this->assertFalse($condition);
  1. Exécuter les tests :
php artisan test --unit

📒 Exemple Pratique : Tester une Fonction Simple

Fonction capitalizeFirstLetter

namespace App\Helpers;
class StringHelper
{
    public static function capitalizeFirstLetter(string $string): string
    {
        return ucfirst($string);
    }
}

Test unitaire StringHelperTest.php

namespace Tests\Unit\Helpers;
use App\Helpers\StringHelper;
use PHPUnit\Framework\TestCase;
class StringHelperTest extends TestCase
{
    public function testCapitalizeFirstLetter()
    {
        $this->assertSame('Hello', StringHelper::capitalizeFirstLetter('hello'));
    }
}

Exécution des tests

php artisan test --unit

💡 Bonnes Pratiques

  • Principe AAA (Arrange-Act-Assert) :
  1. Arrange : Prépare les données
  2. Act : Exécute l'action
  3. Assert : Vérifie le résultat
  • Nommage clair des tests : testUserCanBeCreatedWithValidData()

  • Tester les cas limites (chaîne vide, null, erreurs)

  • Utiliser des Data Providers pour réduire la redondance

  • Explorer le Mocking pour tester sans dépendances externes


🎯 Tâches à Réaliser

  1. Créer une classe Calculator avec les méthodes :

    • add
    • subtract
    • multiply
    • divide
  2. Écrire des tests unitaires pour la classe Calculator dans CalculatorTest.php

  3. Créer un modèle Article avec les propriétés :

    • title
    • body
    • is_published
  4. Ajouter une méthode isPublished et la tester dans ArticleTest.php