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 Strategy