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 construit un système complet de gestion de bibliothèque ! Il est maintenant temps de rassembler tous vos composants et de vérifier que tout fonctionne parfaitement. Vous allez créer un test d'intégration complet qui exercera l'ensemble du flux de travail de votre bibliothèque.
Vous organiserez votre code sur cinq fichiers :
Book.php— Votre classeBookavec des propriétés en lecture seule (isbn,title,author), une propriété privée$isAvailable, et les méthodes :isAvailable(),markAsBorrowed(), etmarkAsReturned().User.php— Incluez le fichier Book. Votre classeUseravec des propriétés en lecture seule (id,name), un tableau privé$borrowedBooks, une constanteMAX_BOOKSde3, et toutes les méthodes utilisateur.Library.php— Incluez le fichier User. Votre classeLibraryavec la gestion des livres, les fonctionnalités d'emprunt/retour, les méthodes de recherche, et la méthoderemoveBook().Admin.php— Incluez le fichier Library. Votre classeAdminétendantUseravec 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 : un nom d'utilisateur et un mot-clé pour la recherche par auteur.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
Faites en sorte que l'administrateur ajoute 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"
Ensuite, exécutez cette séquence de test d'intégration, en affichant chaque résultat sur une nouvelle ligne :
- Faites en sorte que l'utilisateur emprunte
"978-0" - Faites en sorte que l'utilisateur emprunte
"978-1" - Recherchez par auteur en utilisant la deuxième entrée et affichez le nombre :
"Books by author: [count]" - Récupérez les livres disponibles et affichez :
"Available: [count]" - Faites en sorte que l'utilisateur rende
"978-0" - Récupérez à nouveau les livres disponibles et affichez :
"Available after return: [count]" - Faites en sorte que l'administrateur supprime
"978-0" - Faites en sorte que l'administrateur essaie de supprimer
"978-0"à nouveau
- Créez une
Ce défi final valide que l'ensemble de votre système fonctionne de concert — les administrateurs gérant l'inventaire, les utilisateurs empruntant dans les limites imparties, les recherches renvoyant des résultats précis, et la disponibilité se mettant à jour correctement tout au long du processus.
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 bibliothèque (Library)
// TODO: Créer un administrateur (Admin) avec l'ID 1 et le nom "LibraryAdmin"
// TODO: Créer un utilisateur (User) avec l'ID 2 et le nom d'utilisateur fourni
// TODO: Faire en sorte que l'administrateur ajoute 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"
// TODO: Séquence de test d'intégration :
// 1. Faire en sorte que l'utilisateur emprunte "978-0"
// 2. Faire en sorte que l'utilisateur emprunte "978-1"
// 3. Rechercher par auteur en utilisant $searchAuthor et afficher : "Books by author: [count]"
// 4. Obtenir les livres disponibles et afficher : "Available: [count]"
// 5. Faire en sorte que l'utilisateur rende "978-0"
// 6. Obtenir à nouveau les livres disponibles et afficher : "Available after return: [count]"
// 7. Faire en sorte que l'administrateur supprime "978-0"
// 8. Faire en sorte que l'administrateur essaie de supprimer "978-0" à nouveau
?>Toutes les leçons de Programmation Orientée Objet
1Les bases de la POO
Fichiers externesIntroduction à la POOClasses vs ObjetsLe mot-clé $thisMéthodesPropriétésConstructeur (__construct)Destructeur (__destruct)Récapitulatif - Calculatrice simple4Héritage
Héritage de baseLe mot-clé parent::Redéfinition de méthodeLe mot-clé finalClasses abstraitesRécapitulatif - Hiérarchie des employés7Encapsulation
Public, Protégé, PrivéModificateurs d'accès en détailGetters et SettersMasquage d'informationPromotion de constructeur (8.0)Récapitulatif - Système de gestion d'étudiants10Concepts avancés de la POO
Composition vs HéritageInjection de dépendancesClasses anonymesÉnumérations (PHP 8.1)Fibers (PHP 8.1)Clonage d'objets : analyse approfondieGénérateurs et Itérateurs13Patrons de conception Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode ModèlePatron ÉtatPatron CompositePatron Repository2Espaces de noms et Autoloading
Introduction aux espaces de nomsLe mot-clé useStandard d'Autoloading PSR-4L'Autoloader ComposerRécapitulatif - Projet organisé5Interfaces et Contrats
Introduction aux InterfacesImplémentation d'InterfacesImplémentation d'Interfaces MultiplesInterface vs Classe AbstraiteType Hinting avec les InterfacesRécapitulatif - Calculateur de Formes8Méthodes magiques
Introduction aux méthodes magiques__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Clonage d'objets__serialize & __unserializeRécapitulatif - Collection personnalisée11Système de types et gestion des erreurs
Déclarations de typesTypes nullablesTypes d'union et d'intersectionClasses d'exceptionHiérarchie d'exceptions personnaliséesTry, Catch, FinallyRécapitulatif - Validateur de formulaire14Projet : Gestion de bibliothèque
Présentation du projetClasses Livre et Utilisateur3Propriétés de classe
Propriétés d'instance vs Propriétés statiquesConstantes dans les classesMéthodes et propriétés statiquesPropriétés privées et protégéesPropriétés readonly (PHP 8.1)Récapitulatif - Gestionnaire de compte bancaire6Polymorphisme
Retour sur la redéfinition de méthodePolymorphisme via les interfacesType Hinting et Types d'unionLiaison statique tardiveRécapitulatif - Processeur de paiement9Traits
Introduction aux TraitsUtilisation de plusieurs TraitsRésolution des conflits de TraitsMéthodes abstraites dans les TraitsTraits vs Héritage12Patrons de conception Partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FabriquePatron ObservateurPatron Stratégie