Pourquoi mocker
Lors de la rédaction de tests, certains traitements ne doivent pas être exécutés (envoi de mail, cache, API externe). On remplace ces traitements par des « imitations » : c’est le mock. Avantages :- Rapidité — pas d’appel externe ni de traitement lourd
- Stabilité — indépendance vis-à-vis de l’état des services externes
- Portée claire — chaque test cible une classe/méthode
Mocker des objets
Pour mocker un objet injecté via le conteneur, enregistrez l’instance de mock dans le conteneur. Il retournera alors le mock au lieu d’instancier la classe.Méthode mock()
Équivalent plus concis via la méthode de la classe de test de base.
Méthode partialMock()
Pour ne mocker que certaines méthodes ; les autres s’exécutent normalement.
Méthode spy()
Un spy ressemble à un mock mais on vérifie les interactions après l’exécution.
Mocker une façade
Les façades, contrairement aux méthodes statiques classiques, sont mockables. Vous gardez la testabilité de l’injection de dépendances avec une syntaxe concise. Contrôleur utilisant le cache :expects() pour mocker Cache::get.
Espionner une façade
Utilisezspy() sur la façade.
Manipulation du temps
Pour tester une logique dépendante du temps, changez ce quenow() ou Carbon::now() retourne.
La classe de base des tests fonctionnels fournit des helpers.
travel() — Déplacer le temps
Avec une closure
Passez une closure pour tester dans un contexte temporel donné puis revenir automatiquement.freezeTime() — Figer le temps
freezeTime() fige l’heure actuelle ; freezeSecond() la fige au début de la seconde.
Exemple : verrouillage des threads inactifs
Utile pour tester une fonction où un thread se verrouille après une période d’inactivité.Les méthodes de time travel sont disponibles dans les tests fonctionnels (héritant de
Tests\TestCase), pas dans le TestCase de PHPUnit de base.