Pruebas e integración
Parte de la sección Programación Orientada a Objetos del Journey de PHP de Coddy. Lección 87 de 91.
Desafío
Fácil¡Felicitaciones por construir un Sistema de Gestión de Biblioteca completo! Ahora es el momento de unir todos tus componentes y verificar que todo funcione a la perfección. Crearás una prueba de integración exhaustiva que ponga a prueba todo el flujo de trabajo de tu biblioteca.
Organizarás tu código en cinco archivos:
Book.php— Tu claseBookcon propiedades de solo lectura (isbn,title,author), una propiedad privada$isAvailable, y los métodos:isAvailable(),markAsBorrowed(), ymarkAsReturned().User.php— Incluye el archivo Book. Tu claseUsercon propiedades de solo lectura (id,name), un array privado$borrowedBooks, una constanteMAX_BOOKSde3, y todos los métodos de usuario.Library.php— Incluye el archivo User. Tu claseLibrarycon gestión de libros, funcionalidad de préstamo/devolución, métodos de búsqueda y el métodoremoveBook().Admin.php— Incluye el archivo Library. Tu claseAdminque extiende deUsercon los métodosaddBookToLibrary()yremoveBookFromLibrary().main.php— Incluye el archivo Admin. Aquí es donde ejecutarás tu prueba de integración. Recibirás dos entradas: un nombre de usuario y una palabra clave para buscar por autor.Configura tu sistema de biblioteca:
- Crea una
Library - Crea un
Admincon ID1y nombre"LibraryAdmin" - Crea un
Usercon ID2y el nombre de usuario proporcionado
Haz que el administrador agregue estos tres libros:
- 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"
Luego, ejecuta esta secuencia de prueba de integración, imprimiendo cada resultado en una línea nueva:
- Haz que el usuario pida prestado
"978-0" - Haz que el usuario pida prestado
"978-1" - Busca por autor usando la segunda entrada e imprime el conteo:
"Books by author: [count]" - Obtén los libros disponibles e imprime:
"Available: [count]" - Haz que el usuario devuelva
"978-0" - Obtén los libros disponibles de nuevo e imprime:
"Available after return: [count]" - Haz que el administrador elimine
"978-0" - Haz que el administrador intente eliminar
"978-0"de nuevo
- Crea una
Este desafío final valida que todo tu sistema funciona en conjunto: los administradores gestionando el inventario, los usuarios pidiendo prestado dentro de los límites, las búsquedas devolviendo resultados precisos y la disponibilidad actualizándose correctamente a lo largo del flujo de trabajo.
Pruébalo tú mismo
<?php
require_once 'Admin.php';
// Leer entradas
$userName = trim(fgets(STDIN));
$searchAuthor = trim(fgets(STDIN));
// TODO: Crear una Biblioteca (Library)
// TODO: Crear un Administrador (Admin) con ID 1 y nombre "LibraryAdmin"
// TODO: Crear un Usuario (User) con ID 2 y el nombre de usuario proporcionado
// TODO: Hacer que el administrador agregue tres libros:
// - ISBN: "978-0", Título: "PHP Fundamentals", Autor: "Sarah Johnson"
// - ISBN: "978-1", Título: "OOP Patterns", Autor: "Mike Chen"
// - ISBN: "978-2", Título: "Web Security", Autor: "Sarah Johnson"
// TODO: Secuencia de prueba de integración:
// 1. Hacer que el usuario tome prestado "978-0"
// 2. Hacer que el usuario tome prestado "978-1"
// 3. Buscar por autor usando $searchAuthor e imprimir: "Books by author: [count]"
// 4. Obtener libros disponibles e imprimir: "Available: [count]"
// 5. Hacer que el usuario devuelva "978-0"
// 6. Obtener libros disponibles de nuevo e imprimir: "Available after return: [count]"
// 7. Hacer que el administrador elimine "978-0"
// 8. Hacer que el administrador intente eliminar "978-0" de nuevo
?>Todas las lecciones de Programación Orientada a Objetos
1Fundamentos de OOP
Archivos externosIntroducción a OOPClases vs ObjetosLa palabra clave $thisMétodosPropiedadesConstructor (__construct)Destructor (__destruct)Resumen - Calculadora simple4Herencia
Herencia básicaLa palabra clave parent::Sobrescritura de métodosLa palabra clave finalClases abstractasResumen - Jerarquía de empleados7Encapsulamiento
Público, Protegido, PrivadoModificadores de acceso a fondoGetters y SettersOcultamiento de informaciónPromoción de constructor (8.0)Resumen - Sistema de registros de estudiantes10Conceptos avanzados de POO
Composición vs. HerenciaInyección de dependenciasClases anónimasEnums (PHP 8.1)Fibers (PHP 8.1)Clonación de objetos a fondoGeneradores e Iteradores13Patrones de diseño Parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón CompositePatrón Repository2Espacios de nombres y Autoloading
Introducción a los espacios de nombresLa palabra clave useEstándar de Autoloading PSR-4Autoloader de ComposerResumen - Proyecto organizado5Interfaces y Contratos
Introducción a las InterfacesImplementación de InterfacesImplementación de Múltiples InterfacesInterfaz vs Clase AbstractaType Hinting con InterfacesResumen - Calculadora de Formas8Métodos mágicos
Introducción a los métodos mágicos__toString y __debugInfo__get, __set, __isset, __unset__call y __callStatic__clone y clonación de objetos__serialize y __unserializeResumen - Colección personalizada11Sistema de tipos y manejo de errores
Declaraciones de tiposTipos anulablesTipos de unión e intersecciónClases de excepciónJerarquía de excepciones personalizadasTry, Catch, FinallyResumen - Validador de formularios14Proyecto: Gestión de biblioteca
Descripción general del proyectoClases de Libros y Usuarios3Propiedades de clase
Propiedades de instancia vs. estáticasConstantes en clasesMétodos y propiedades estáticosPropiedades privadas y protegidasPropiedades de solo lectura (PHP 8.1)Resumen - Gestor de cuenta bancaria6Polimorfismo
Sobrescritura de métodos revisadaPolimorfismo mediante interfacesType Hinting y tipos de uniónEnlace estático tardíoResumen - Procesador de pagos9Traits
Introducción a los TraitsUso de múltiples TraitsResolución de conflictos de TraitsMétodos abstractos en TraitsTraits frente a herencia12Patrones de diseño Parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón ObserverPatrón StrategyPractica por tu cuenta: Compilador de PHP online