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.php
➞CalculatorTest.php
📝 Écrire un Test Unitaire de Base
- Créer un fichier de test :
php artisan make:test CalculatorTest --unit
- 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);
}
}
- Utiliser les assertions :
$this->assertEquals(5, $result);
$this->assertTrue($condition);
$this->assertFalse($condition);
- 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) :
- Arrange : Prépare les données
- Act : Exécute l'action
- 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
-
Créer une classe
Calculator
avec les méthodes :add
-
subtract
multiply
divide
Écrire des tests unitaires pour la classe
Calculator
dansCalculatorTest.php
-
Créer un modèle
Article
avec les propriétés :title
body
is_published
Ajouter une méthode
isPublished
et la tester dansArticleTest.php