Tests et intégration
Fait partie de la section Programmation Orientée Objet du Journey PHP de Coddy. Leçon 87 sur 91.
Défi
FacileFélicitations pour avoir créé un système complet de gestion de bibliothèque ! Il est maintenant temps de réunir tous vos composants et de vérifier que tout fonctionne parfaitement. Vous allez créer un test d’intégration complet qui parcourt l’ensemble du flux de travail de votre bibliothèque.
Vous allez organiser votre code sur cinq fichiers :
Book.php: votre classeBookavec des propriétés readonly (isbn,title,author), une propriété$isAvailableprivée et les méthodes :isAvailable(),markAsBorrowed()etmarkAsReturned().User.php: incluez le fichier Book. Votre classeUseravec des propriétés readonly (id,name), un tableau$borrowedBooksprivé, une constanteMAX_BOOKSde3et toutes les méthodes utilisateur.Library.php: incluez le fichier User. Votre classeLibraryavec la gestion des livres, les fonctionnalités d’emprunt et de retour, les méthodes de recherche et la méthoderemoveBook().Admin.php: incluez le fichier Library. Votre classeAdminqui étendUser, avec les méthodesaddBookToLibrary()etremoveBookFromLibrary().main.php: incluez le fichier Admin. C’est ici que vous exécuterez votre test d’intégration. Vous recevrez deux entrées : le nom d’un utilisateur et un mot-clé correspondant à un auteur à rechercher.Configurez votre système de bibliothèque :
- Créez une
Library - Créez un
Adminavec l’ID1et le nom"LibraryAdmin" - Créez un
Useravec l’ID2et le nom d’utilisateur fourni
Demandez à l’administrateur d’ajouter ces trois livres :
- ISBN :
"978-0", titre :"PHP Fundamentals", auteur :"Sarah Johnson" - ISBN :
"978-1", titre :"OOP Patterns", auteur :"Mike Chen" - ISBN :
"978-2", titre :"Web Security", auteur :"Sarah Johnson"
Exécutez ensuite cette séquence de test d’intégration en affichant chaque résultat sur une nouvelle ligne :
- Demandez à l’utilisateur d’emprunter
"978-0" - Demandez à l’utilisateur d’emprunter
"978-1" - Effectuez une recherche par auteur à l’aide de la deuxième entrée et affichez le nombre :
"Books by author: [count]" - Récupérez les livres disponibles et affichez :
"Available: [count]" - Demandez à l’utilisateur de retourner
"978-0" - Récupérez à nouveau les livres disponibles et affichez :
"Available after return: [count]" - Demandez à l’administrateur de supprimer
"978-0" - Demandez à l’administrateur d’essayer à nouveau de supprimer
"978-0"
- Créez une
Ce défi final vérifie que l’ensemble de votre système fonctionne de manière cohérente : les administrateurs gèrent l’inventaire, les utilisateurs empruntent dans les limites autorisées, les recherches renvoient des résultats exacts et la disponibilité est correctement mise à jour tout au long du flux de travail.
Essayez vous-même
<?php
require_once 'Admin.php';
// Lire les entrées
$userName = trim(fgets(STDIN));
$searchAuthor = trim(fgets(STDIN));
// TODO: Créer une Library
// TODO: Créer un Admin avec l'ID 1 et le nom "LibraryAdmin"
// TODO: Créer un User avec l'ID 2 et le nom d'utilisateur fourni
// TODO: Faire ajouter trois livres par l'admin :
// - ISBN: "978-0", Title: "PHP Fundamentals", Author: "Sarah Johnson"
// - ISBN: "978-1", Title: "OOP Patterns", Author: "Mike Chen"
// - ISBN: "978-2", Title: "Web Security", Author: "Sarah Johnson"
// TODO: Séquence de test d'intégration :
// 1. Faire emprunter "978-0" par l'utilisateur
// 2. Faire emprunter "978-1" par l'utilisateur
// 3. Search by author using $searchAuthor and print: "Books by author: [count]"
// 4. Obtenir les livres disponibles et afficher : "Available: [count]"
// 5. Faire retourner "978-0" par l'utilisateur
// 6. Get available books again and print: "Available after return: [count]"
// 7. Faire supprimer "978-0" par l'admin
// 8. Faire essayer à l'admin de supprimer "978-0" à nouveau
?>Toutes les leçons de Programmation Orientée Objet
1Fondamentaux de la POO
Fichiers externesIntroduction à la POOClasses et objetsLe mot-clé $thisMéthodesPropriétésConstructeur (__construct)Destructeur (__destruct)Récapitulatif - Calculatrice simple4Héritage
Héritage de baseLe mot-clé parent::Redéfinition des méthodesLe mot-clé finalClasses abstraitesRécapitulatif – Hiérarchie des employés7Encapsulation
Public, Protected, PrivateModificateurs d’accès en profondeurAccesseurs et mutateursDissimulation de l’informationPromotion des constructeurs (8.0)Récapitulatif – Système de fiches étudiant10Concepts avancés de la POO
Composition ou héritageInjection de dépendancesClasses anonymesÉnumérations (PHP 8.1)Fibres (PHP 8.1)Approfondissement du clonage d’objetsGénérateurs et itérateurs13Patrons de conception – Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode modèlePatron ÉtatPatron CompositePatron Dépôt2Espaces de noms et chargement automatique
Introduction aux espaces de nomsLe mot-clé useNorme de chargement automatique PSR-4Autoloader de ComposerRécapitulatif - Projet organisé5Interfaces et contrats
Introduction aux interfacesImplémentation des interfacesImplémentation de plusieurs interfacesInterface ou classe abstraiteIndication de type avec les interfacesRécapitulatif - Calculateur de formes8Méthodes magiques
Introduction aux méthodes magiques__toString et __debugInfo__get, __set, __isset, __unset__call et __callStatic__clone et clonage d’objets__serialize et __unserializeRécapitulatif - Collection personnalisée11Système de types et gestion des erreurs
Déclarations de typesTypes nullablesTypes union et intersectionClasses d’exceptionsHiérarchie d’exceptions personnaliséeTry, Catch, FinallyRécapitulatif - Validateur de formulaires14Projet : gestion de bibliothèque
Présentation du projetClasses Livre et Utilisateur3Propriétés de classe
Propriétés d’instance vs statiquesConstantes dans les classesMéthodes et propriétés statiquesPropriétés privées et protégéesPropriétés en lecture seule (PHP 8.1)Récapitulatif - Gestionnaire de comptes bancaires6Polymorphisme
Révision de la redéfinition des méthodesPolymorphisme via les interfacesAnnotations de type et types unionLiaison statique tardiveRécapitulatif - Processeur de paiements9Traits
Introduction aux traitsUtilisation de plusieurs traitsRésolution des conflits entre traitsMéthodes abstraites dans les traitsTraits par rapport à l’héritage12Patrons de conception – Partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FactoryPatron ObserverPatron StrategyEntraînez-vous par vous-même : Compilateur PHP en ligne