OFPPT Office de la Formation Professionnelle
et de la Promotion du Travail
ISTA INZEGANE
Filière :DD WFS TP : Tests unitaires
Formation : Initiale Module : Développer en Backend
A. Introduction des tests unitaires :
Un test unitaire est une procédure automatisée qui vérifie qu'une unité spécifique de code fonctionne
correctement. Une unité peut être une fonction, une méthode, ou même une classe entière, selon le contexte
du langage de programmation utilisé.
1) Objectifs des tests unitaires :
a) Tester des fonctionnalités : Les tests unitaires isolent chaque composant, permettant de détecter
des erreurs spécifiques à une unité plutôt qu'à l'ensemble du système.
b) Régression : Les tests unitaires détectent les régressions, c'est-à-dire les changements qui
affectent involontairement le fonctionnement d'une unité déjà testée avec succès.
c) Documentation dynamique : Les tests unitaires servent également de documentation vivante en
fournissant des exemples concrets de l'utilisation des unités de code.
2) Cycle de vie d'un test unitaire :
a) Écriture du test : Définir les conditions d'entrée, appeler la fonction à tester avec ces conditions,
et spécifier les résultats attendus.
b) Exécution du test : Lancer le test automatisé pour exécuter la fonction et vérifier si les résultats
correspondent aux attentes.
c) Analyse des résultats : Examiner les résultats du test pour identifier les éventuelles erreurs.
d) Correction du code : Si des erreurs sont détectées, corriger le code de l'unité jusqu'à ce que le
test réussisse.
3) Outils de test unitaire :
De nombreux langages de programmation fournissent des frameworks dédiés aux tests unitaires, tels que
phpUnit pour php,JUnit pour Java, NUnit pour .NET, unittest pour Python, etc.
B. PhpUnit :
a) Examiner le fichier phpunit.xml situer dans la racine du projet
b) Examiner le dossier tests
c) Examiner les deux fichiers ExampleTest.php
d) Exécuter les commandes suivantes et commenter :
>php artisan test
>./vendor/bin/phpunit
>php artisan test --testsuite=Unit
> php artisan test --testsuite=Feature
e) Dans le model Categorie ajouter une méthode sommation(a,b) pour illustrer le principe de
tests unitaires
f) Créer une classe de tests unitaires en exécutant la commande :
>php artisan make:test CategorieModelTest –unit
g) Ajouter la méthode de test qui vérifier est-ce que la méthode sommation fonctionne bien :
Quelques assertions de phpUnit :
Assertions sur les égalités :
assertEquals($expected, $actual): Vérifie que deux valeurs sont égales.
assertSame($expected, $actual): Vérifie que deux valeurs sont identiques en termes de valeur
et de type.
Assertions sur les inégalités :
assertNotEquals($expected, $actual): Vérifie que deux valeurs ne sont pas égales.
assertNotSame($expected, $actual): Vérifie que deux valeurs ne sont pas identiques en termes
de valeur ou de type.
Assertions sur les booléens :
assertTrue($condition): Vérifie que la condition est vraie.
assertFalse($condition): Vérifie que la condition est fausse.
Assertions sur les tableaux :
assertArrayHasKey($key, $array): Vérifie que la clé existe dans le tableau.
assertArrayNotHasKey($key, $array): Vérifie que la clé n'existe pas dans le tableau.
assertCount($expectedCount, $array): Vérifie que le tableau a un nombre spécifié d'éléments.
Assertions sur les chaînes de caractères :
assertStringContainsString($needle, $haystack): Vérifie que la sous-chaîne est présente dans la
chaîne.
assertStringNotContainsString($needle, $haystack): Vérifie que la sous-chaîne n'est pas
présente dans la chaîne.
assertStringStartsWith($prefix, $string): Vérifie que la chaîne commence par un préfixe
spécifié.
Assertions sur les objets :
assertInstanceOf($expectedClass, $object): Vérifie que l'objet est une instance d'une classe
spécifique.
assertNotInstanceOf($expectedClass, $object): Vérifie que l'objet n'est pas une instance d'une
classe spécifique.
assertNull($actual): Vérifie que la valeur est null.
assertNotNull($actual): Vérifie que la valeur n'est pas null.
Assertions sur les fichiers et les répertoires :
assertFileExists($filename): Vérifie que le fichier existe.
assertFileNotExists($filename): Vérifie que le fichier n'existe pas.
assertDirectoryExists($directory): Vérifie que le répertoire existe.
assertDirectoryNotExists($directory): Vérifie que le répertoire n'existe pas.
Assertions sur les exceptions :
expectException($exceptionClass): Vérifie qu'une exception spécifique est levée.
expectExceptionMessage($message): Vérifie le message d'une exception.
expectExceptionCode($code): Vérifie le code d'exception.
Assertions spécifiques à laravel :
Dans Laravel, les tests de fonctionnalités (feature tests) utilisent plusieurs méthodes d'assertion
spécifiques à Laravel, en plus des assertions de base fournies par PHPUnit. Voici quelques-
unes des assertions spécifiques à Laravel que vous pouvez utiliser dans vos tests fonctionnels :
Assertions sur les vues :
assertViewIs($view): Vérifie que la vue renvoyée par la réponse correspond à la vue spécifiée.
assertViewHas($key, $value = null): Vérifie que la vue renvoyée contient la clé spécifiée avec
la valeur associée.
assertViewMissing($key): Vérifie que la vue renvoyée ne contient pas la clé spécifiée.
assertSee($data) : vérifier la présence d'une chaîne de caractères spécifique dans le contenu de
la réponse HTTP générée par une requête.
Assertions sur les redirections :
assertRedirect($uri = null): Vérifie que la réponse est une redirection.
assertRedirectTo($uri): Vérifie que la réponse est une redirection vers une URL spécifique.
Assertions sur les sessions :
assertSessionHas($key, $value = null): Vérifie que la session contient la clé spécifiée avec la
valeur associée.
assertSessionMissing($key): Vérifie que la session ne contient pas la clé spécifiée.
Assertions sur les bases de données :
assertDatabaseHas($table, $data): Vérifie que des données spécifiées sont présentes dans la
table de la base de données.
assertDatabaseMissing($table, $data): Vérifie que des données spécifiées ne sont pas présentes
dans la table de la base de données.
Assertions sur les formulaires :
assertInputValue($field, $value): Vérifie que la valeur d'un champ de formulaire est celle
spécifiée.
assertChecked($field, $value = null): Vérifie que la case à cocher spécifiée est cochée.
Assertions sur les messages de session :
assertSessionHasErrors($keys = [], $format = null, $errorBag = 'default'): Vérifie que des
erreurs de validation spécifiées sont présentes dans la session.
assertSessionDoesntHaveErrors($keys = [], $format = null, $errorBag = 'default'): Vérifie que
des erreurs de validation spécifiées ne sont pas présentes dans la session.
Assertions sur les cookies :
assertCookie($cookieName, $value = null): Vérifie qu'un cookie spécifié est présent dans la
réponse avec la valeur associée.
assertCookieExpired($cookieName): Vérifie qu'un cookie spécifié a expiré.
h) Maintenant en souhaite configurer une base de données pour les tests des actions du
controlleurs.
Créer un fichier de configuration pour les tests : .env.testing
i) Créer une classe de tests unitaire pour le controlleur :
>php artisan make:test CategorieControllerlTest –Feature
Ajouter ces tests: