Tests 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 deine Komponenten zusammenzuführen und zu überprüfen, ob alles reibungslos funktioniert. Du wirst einen umfassenden Integrationstest erstellen, der den vollständigen Ablauf deiner Bibliothek durchläuft.
Du wirst deinen Code auf fünf Dateien verteilen:
Book.php: DeineBook-Klasse mit readonly-Eigenschaften (isbn,title,author), einer privaten$isAvailable-Eigenschaft und den Methoden:isAvailable(),markAsBorrowed()undmarkAsReturned().User.php: Binde die Book-Datei ein. DeineUser-Klasse mit readonly-Eigenschaften (id,name), einem privaten$borrowedBooks-Array, einerMAX_BOOKS-Konstante mit dem Wert3und allen Benutzermethoden.Library.php: Binde die User-Datei ein. DeineLibrary-Klasse mit Buchverwaltung, Ausleih- und Rückgabefunktionen, Suchmethoden und der MethoderemoveBook().Admin.php: Binde die Library-Datei ein. DeineAdmin-Klasse, dieUsermit den MethodenaddBookToLibrary()undremoveBookFromLibrary()erweitert.main.php: Binde die Admin-Datei ein. Hier wirst du deinen Integrationstest ausführen. Du erhältst zwei Eingaben: einen Benutzernamen und ein Suchstichwort für den Autor.Richte dein Bibliothekssystem ein:
- Erstelle eine
Library - Erstelle einen
Adminmit der ID1und dem Namen"LibraryAdmin" - Erstelle einen
Usermit der ID2und dem angegebenen Benutzernamen
Lass 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ühre anschließend diese Sequenz des Integrationstests durch und gib jedes Ergebnis in einer neuen Zeile aus:
- Lass den Benutzer
"978-0"ausleihen - Lass den Benutzer
"978-1"ausleihen - Suche anhand des zweiten Eingabewerts nach dem Autor und gib die Anzahl aus:
"Books by author: [count]" - Rufe die verfügbaren Bücher ab und gib Folgendes aus:
"Available: [count]" - Lass den Benutzer
"978-0"zurückgeben - Rufe die verfügbaren Bücher erneut ab und gib Folgendes aus:
"Available after return: [count]" - Lass den Admin
"978-0"entfernen - Lass den Admin erneut versuchen,
"978-0"zu entfernen
- Erstelle eine
Diese abschließende Herausforderung bestätigt, dass dein gesamtes System zusammenarbeitet: Administratoren verwalten den Bestand, Benutzer leihen Bücher innerhalb der Grenzen aus, Suchvorgänge liefern genaue Ergebnisse und die Verfügbarkeit wird während des gesamten Ablaufs korrekt aktualisiert.
Probier es selbst
<?php
require_once 'Admin.php';
// Eingaben lesen
$userName = trim(fgets(STDIN));
$searchAuthor = trim(fgets(STDIN));
// TODO: Erstelle eine Library
// TODO: Erstelle einen Admin mit ID 1 und dem Namen "LibraryAdmin"
// TODO: Erstelle einen User mit ID 2 und dem angegebenen Benutzernamen
// TODO: Lass den Admin drei Bücher hinzufügen:
// - ISBN: "978-0", Title: "PHP Fundamentals", Author: "Sarah Johnson"
// - ISBN: "978-1", Titel: "OOP Patterns", Autor: "Mike Chen"
// - ISBN: "978-2", Titel: "Web Security", Autor: "Sarah Johnson"
// TODO: Integrationstest-Sequenz:
// 1. Lass den User "978-0" ausleihen
// 2. Lass den User "978-1" ausleihen
// 3. Search by author using $searchAuthor and print: "Books by author: [count]"
// 4. Hole verfügbare Bücher und gib aus: "Available: [count]"
// 5. Lass den User "978-0" zurückgeben
// 6. Get available books again and print: "Available after return: [count]"
// 7. Lass den Admin "978-0" entfernen
// 8. Lass den Admin versuchen, "978-0" erneut zu entfernen
?>Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in OOPKlassen vs. ObjekteDas Schlüsselwort $thisMethodenEigenschaftenKonstruktor (__construct)Destruktor (__destruct)Rückblick – Einfacher Taschenrechner4Vererbung
Grundlegende VererbungDas Schlüsselwort parent::MethodenüberschreibungDas Schlüsselwort finalAbstrakte KlassenRückblick – Mitarbeiterhierarchie7Kapselung
Öffentlich, geschützt, privatZugriffsmodifikatoren im DetailGetter und SetterInformationsverbergungKonstruktor-Promotion (8.0)Wiederholung – System zur Verwaltung von Schülerdatensätzen2Namespaces & Autoloading
Einführung in NamespacesDas use-SchlüsselwortPSR-4-Autoloading-StandardComposer-AutoloaderRückblick – Organisiertes Projekt5Schnittstellen & Verträge
Einführung in SchnittstellenSchnittstellen implementierenMehrere Schnittstellen implementierenSchnittstelle vs. abstrakte KlasseTyp-Hinweise mit SchnittstellenRückblick – Formrechner8Magische Methoden
Einführung in magische Methoden__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Objektklonen__serialize & __unserializeRückblick – Benutzerdefinierte Sammlung11Typsystem & Fehlerbehandlung
TypdeklarationenNullable-TypenUnion- & Intersection-TypenException-KlassenBenutzerdefinierte Exception-HierarchieTry, Catch, FinallyRückblick – Formularvalidator14Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen3Klassen-Eigenschaften
Instanz- vs. statische EigenschaftenKonstanten in KlassenStatische Methoden & EigenschaftenPrivate & geschützte EigenschaftenSchreibgeschützte Eigenschaften (PHP 8.1)Zusammenfassung – Bankkonto-Manager6Polymorphie
Methodenüberschreibung erneut betrachtetPolymorphie über SchnittstellenTyp-Hinweise & Union-TypenSpätes statisches BindenRückblick – Zahlungsabwickler9Traits
Einführung in TraitsMehrere Traits verwendenAuflösung von Trait-KonfliktenAbstrakte Methoden in TraitsTraits vs. Vererbung12Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster15Abschließende Herausforderungen
E-Learning-PlattformBankingsystemEntwicklung einer SpielfigurFahrzeugvermietungÜbe selbstständig: Online-PHP-Compiler