Testen und Integration
Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy — Lektion 87 von 91.
Aufgabe
EinfachHerzlichen Glückwunsch zum Aufbau eines vollständigen Bibliotheksverwaltungssystems! Jetzt ist es an der Zeit, alle Ihre Komponenten zusammenzuführen und zu überprüfen, ob alles nahtlos funktioniert. Sie werden einen umfassenden Integrationstest erstellen, der den gesamten Workflow Ihrer Bibliothek durchläuft.
Sie werden Ihren Code auf fünf Dateien verteilen:
Book.php— IhreBook-Klasse mit Readonly-Eigenschaften (isbn,title,author), einer privaten$isAvailable-Eigenschaft und den Methoden:isAvailable(),markAsBorrowed()undmarkAsReturned().User.php— Binden Sie die Book-Datei ein. IhreUser-Klasse mit Readonly-Eigenschaften (id,name), einem privaten$borrowedBooks-Array, einerMAX_BOOKS-Konstante von3und allen User-Methoden.Library.php— Binden Sie die User-Datei ein. IhreLibrary-Klasse mit Buchverwaltung, Ausleih-/Rückgabefunktionalität, Suchmethoden und derremoveBook()-Methode.Admin.php— Binden Sie die Library-Datei ein. IhreAdmin-Klasse, dieUsererweitert, mit den MethodenaddBookToLibrary()undremoveBookFromLibrary().main.php— Binden Sie die Admin-Datei ein. Hier führen Sie Ihren Integrationstest aus. Sie erhalten zwei Eingaben: einen Benutzernamen und ein Suchwort für den Autor.Richten Sie Ihr Bibliothekssystem ein:
- Erstellen Sie eine
Library - Erstellen Sie einen
Adminmit der ID1und dem Namen"LibraryAdmin" - Erstellen Sie einen
Usermit der ID2und dem angegebenen Benutzernamen
Lassen Sie den Admin diese drei Bücher hinzufügen:
- ISBN:
"978-0", Titel:"PHP Fundamentals", Autor:"Sarah Johnson" - ISBN:
"978-1", Titel:"OOP Patterns", Autor:"Mike Chen" - ISBN:
"978-2", Titel:"Web Security", Autor:"Sarah Johnson"
Führen Sie dann diese Integrationstest-Sequenz durch und geben Sie jedes Ergebnis in einer neuen Zeile aus:
- Lassen Sie den Benutzer
"978-0"ausleihen - Lassen Sie den Benutzer
"978-1"ausleihen - Suchen Sie nach dem Autor unter Verwendung der zweiten Eingabe und geben Sie die Anzahl aus:
"Books by author: [count]" - Rufen Sie die verfügbaren Bücher ab und geben Sie aus:
"Available: [count]" - Lassen Sie den Benutzer
"978-0"zurückgeben - Rufen Sie die verfügbaren Bücher erneut ab und geben Sie aus:
"Available after return: [count]" - Lassen Sie den Admin
"978-0"entfernen - Lassen Sie den Admin versuchen,
"978-0"erneut zu entfernen
- Erstellen Sie eine
Diese abschließende Herausforderung bestätigt, dass Ihr gesamtes System zusammenarbeitet – Admins verwalten den Bestand, Benutzer leihen innerhalb der Limits aus, Suchen liefern genaue Ergebnisse und die Verfügbarkeit wird während des gesamten Workflows korrekt aktualisiert.
Probier es selbst
<?php
require_once 'Admin.php';
// Eingaben lesen
$userName = trim(fgets(STDIN));
$searchAuthor = trim(fgets(STDIN));
// TODO: Eine Bibliothek erstellen
// TODO: Einen Admin mit der ID 1 und dem Namen "LibraryAdmin" erstellen
// TODO: Einen User mit der ID 2 und dem angegebenen Benutzernamen erstellen
// TODO: Den Admin drei Bücher hinzufügen lassen:
// - ISBN: "978-0", Titel: "PHP Fundamentals", Autor: "Sarah Johnson"
// - ISBN: "978-1", Titel: "OOP Patterns", Autor: "Mike Chen"
// - ISBN: "978-2", Titel: "Web Security", Autor: "Sarah Johnson"
// TODO: Integrationstest-Sequenz:
// 1. Den User "978-0" ausleihen lassen
// 2. Den User "978-1" ausleihen lassen
// 3. Suche nach Autor mit $searchAuthor und Ausgabe: "Books by author: [count]"
// 4. Verfügbare Bücher abrufen und Ausgabe: "Available: [count]"
// 5. Den User "978-0" zurückgeben lassen
// 6. Verfügbare Bücher erneut abrufen und Ausgabe: "Available after return: [count]"
// 7. Den Admin "978-0" entfernen lassen
// 8. Den Admin versuchen lassen, "978-0" erneut zu entfernen
?>Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDas $this-SchlüsselwortMethodenEigenschaftenKonstruktor (__construct)Destruktor (__destruct)Rückblick - Einfacher Taschenrechner4Vererbung
Grundlagen der VererbungDas parent:: SchlüsselwortMethoden überschreibenDas final SchlüsselwortAbstrakte KlassenZusammenfassung – Mitarbeiter-Hierarchie7Kapselung
Public, Protected, PrivateZugriffsmodifikatoren im DetailGetter und SetterInformation HidingConstructor Promotion (8.0)Zusammenfassung – Studentenverwaltungssystem2Namensräume & Autoloading
Einführung in NamensräumeDas use-SchlüsselwortPSR-4 Autoloading-StandardComposer AutoloaderZusammenfassung – Organisiertes Projekt5Interfaces & Verträge
Einführung in InterfacesInterfaces implementierenMehrfache Interface-ImplementierungInterface vs. Abstrakte KlasseType Hinting mit InterfacesZusammenfassung – Formen-Rechner8Magische Methoden
Einführung in magische Methoden__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Objekt-Klonen__serialize & __unserializeZusammenfassung - Eigene Collection11Typsystem & Fehlerbehandlung
TypdeklarationenNullable-TypenUnion- & Intersection-TypenException-KlassenEigene Exception-HierarchieTry, Catch, FinallyZusammenfassung - Formular-Validator14Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen3Klasseneigenschaften
Instanz- vs. statische EigenschaftenKonstanten in KlassenStatische Methoden & EigenschaftenPrivate & geschützte EigenschaftenReadonly-Eigenschaften (PHP 8.1)Zusammenfassung – Bankkonto-Manager6Polymorphismus
Method Overriding erneut betrachtetPolymorphismus über InterfacesType Hinting & Union TypesLate Static BindingZusammenfassung – Payment Processor9Traits
Einführung in TraitsVerwendung mehrerer TraitsKonfliktlösung bei TraitsAbstrakte Methoden in TraitsTraits vs. Vererbung12Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster15Abschlussherausforderungen
E-Learning-PlattformBanksystemSpielcharakter-EntwicklungFahrzeugvermietung