====== D5-A02 : Les tests unitaires ====== __Durée estimée__ : 4 heures Travail validé par la présentation de sa validation(au moins 1 test) à la classe le **vendredi 26/09** à 11h ===== Ressources ===== * https://junit.org/junit4/javadoc/latest/org/junit/Assert.html * https://zestedesavoir.com/tutoriels/274/les-tests-unitaires-en-java/ * https://codegym.cc/fr/groups/posts/fr.191.tests-unitaires-en-java-avec-junit * https://www.machinet.net/tutorial-fr/java-unit-test-guide ===== Rappel ===== Un test automatisé est un programme qui se découpe en trois phases dites AAA pour Arrange, Act, Assert : - **Arrange** : La mise en place de l’environnement : création et initialisation des objets nécessaires à l’exécution du test. - **Act** : Le test proprement dit. - **Assert** : La vérification des résultats obtenus par le test. Le sous-système (l’ensemble des objets) éprouvé par le test est parfois appelé SUT (System Under Test). ===== Objectif pédagogique ===== * Comprendre la différence entre tests unitaires, d’intégration, fonctionnels et de performance. * Savoir écrire et exécuter des tests avec un framework (**en Java avec JUnit** / en PHP avec PHPUnit). * Prendre conscience de l’importance de l’automatisation et des bonnes pratiques de validation. ===== ===== ===== Contexte : Bibliothèque numérique ===== Vous travaillez pour une startup qui développe une application de gestion de bibliothèque. L’application doit permettre : * La gestion d’un catalogue de livres. * L’ajout et la suppression d’utilisateurs. * La gestion des emprunts (règle : un utilisateur ne peut pas emprunter plus de 3 livres). L’application a un fonctionnement actuel minimal et nous allons nous concentrer sur la gestion des livres. **Objectif** : améliorer la qualité et la sécurité des données via les tests unitaires, d’intégration et fonctionnels. ===== ===== Vous allez développer et tester progressivement ce projet. * récupérer le projet sur gitea Dans Netbeans : - cloner la branche **developpement** du dépôt (https://delphine.thevenot@gitea.lyc-lecastel.fr/delphine.thevenot/2026TestsBibliotheque.git), - créer votre branche -votre prénom- et **ne travailler que sur votre branche** - commiter avec un commentaire précis et pusher sur votre branche personnelle uniquement Travail à faire1 - Étudier la classe Livre et la classe de tests unitaires correspondante (LivreTest) - Identifier les 3 parties AAA de chaque test - Que vérifient les tests ? - Ajouter un message clair en cas d'erreur sur chaque test - Qu’est-ce qui n’est pas testé ? - Quels risques pour la sécurité si ces vérifications manquent ? ===== ===== ===== Evolution du contexte : nouveaux tests unitaires ===== Vous allez mettre en place de nouveaux tests pour assurer : * la validation des champs (titre, auteur, ISBN), * la robustesse face aux entrées malveillantes (XSS, caractères interdits), * l’intégrité globale des données Travail à faire2 Chaque étudiant va implémenter une nouvelle règle de validation : - (//Emile//)-ISBN : doit avoir 13 chiffres (pas de lettres, pas de caractères spéciaux), exemple invalide : "1234ABCD567". - (//Salomé//)-Titre : ne doit pas contenir