Тестирование и интеграция
Часть раздела Объектно-ориентированное программирование путешествия по PHP на Coddy. Урок 87 из 91.
Задание
ЛегкоПоздравляем с созданием полноценной системы управления библиотекой! Теперь пришло время объединить все компоненты и убедиться, что всё работает без сбоев. Ты создашь комплексный интеграционный тест, который проверит весь рабочий процесс твоей библиотеки.
Ты организуешь код в пяти файлах:
Book.php: твой классBookсо свойствами readonly (isbn,title,author), приватным свойством$isAvailableи методами:isAvailable(),markAsBorrowed()иmarkAsReturned().User.php: подключи файл Book. Твой классUserсо свойствами readonly (id,name), приватным массивом$borrowedBooks, константойMAX_BOOKSсо значением3и всеми методами пользователя.Library.php: подключи файл User. Твой классLibraryс управлением книгами, функциональностью выдачи и возврата, методами поиска и методомremoveBook().Admin.php: подключи файл Library. Твой классAdmin, расширяющийUser, с методамиaddBookToLibrary()иremoveBookFromLibrary().main.php: подключи файл Admin. Здесь ты запустишь интеграционный тест. Ты получишь два входных значения: имя пользователя и ключевое слово для поиска автора.Настрой свою систему библиотеки:
- Создай
Library - Создай
Adminс ID1и именем"LibraryAdmin" - Создай
Userс ID2и предоставленным именем пользователя
Пусть администратор добавит эти три книги:
- ISBN:
"978-0", название:"PHP Fundamentals", автор:"Sarah Johnson" - ISBN:
"978-1", название:"OOP Patterns", автор:"Mike Chen" - ISBN:
"978-2", название:"Web Security", автор:"Sarah Johnson"
Затем выполни следующую последовательность интеграционного теста, выводя каждый результат с новой строки:
- Пусть пользователь возьмёт
"978-0" - Пусть пользователь возьмёт
"978-1" - Выполни поиск по автору, используя второе входное значение, и выведи количество:
"Books by author: [count]" - Получи доступные книги и выведи:
"Available: [count]" - Пусть пользователь вернёт
"978-0" - Снова получи доступные книги и выведи:
"Available after return: [count]" - Пусть администратор удалит
"978-0" - Пусть администратор снова попытается удалить
"978-0"
- Создай
Это финальное задание проверяет, что вся система работает согласованно: администраторы управляют запасами, пользователи берут книги в пределах ограничений, поиск возвращает точные результаты, а доступность корректно обновляется на протяжении всего рабочего процесса.
Попробуйте сами
<?php
require_once 'Admin.php';
// Считать входные данные
$userName = trim(fgets(STDIN));
$searchAuthor = trim(fgets(STDIN));
// TODO: Создать Library
// TODO: Создать Admin с ID 1 и именем "LibraryAdmin"
// TODO: Создать User с ID 2 и предоставленным именем пользователя
// TODO: Пусть admin добавит три книги:
// - 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"
// TODO: Последовательность интеграционного теста:
// 1. Пусть user возьмёт "978-0"
// 2. Пусть user возьмёт "978-1"
// 3. Search by author using $searchAuthor and print: "Books by author: [count]"
// 4. Получить доступные книги и вывести: "Available: [count]"
// 5. Пусть user вернёт "978-0"
// 6. Get available books again and print: "Available after return: [count]"
// 7. Пусть администратор удалит "978-0"
// 8. Пусть администратор попробует удалить "978-0" снова
?>Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыВведение в ООПКлассы и объектыКлючевое слово $thisМетодыСвойстваКонструктор (__construct)Деструктор (__destruct)Повторение — простой калькулятор4Наследование
Основы наследованияКлючевое слово parent::Переопределение методовКлючевое слово finalАбстрактные классыПовторение — иерархия сотрудников7Инкапсуляция
Public, Protected, PrivateМодификаторы доступа подробноГеттеры и сеттерыСокрытие информацииПродвижение конструктора (8.0)Повторение — система учёта студентов2Пространства имён и автозагрузка
Введение в пространства имёнКлючевое слово useСтандарт автозагрузки PSR-4Автозагрузчик ComposerПовторение — структурированный проект5Интерфейсы и контракты
Введение в интерфейсыРеализация интерфейсовРеализация нескольких интерфейсовИнтерфейс и абстрактный классАннотация типов с интерфейсамиПовторение — калькулятор фигур8Магические методы
Введение в магические методы__toString и __debugInfo__get, __set, __isset, __unset__call и __callStatic__clone и клонирование объектов__serialize и __unserializeПовторение — пользовательская коллекция11Система типов и обработка ошибок
Объявления типовNullable-типыОбъединение и пересечение типовКлассы исключенийПользовательская иерархия исключенийTry, Catch, FinallyПовторение — валидатор формы14Проект: управление библиотекой
Обзор проектаКлассы книг и пользователей3Свойства классов
Свойства экземпляра и статические свойстваКонстанты в классахСтатические методы и свойстваПриватные и защищённые свойстваСвойства только для чтения (PHP 8.1)Повторение — менеджер банковского счёта6Полиморфизм
Повторение переопределения методовПолиморфизм через интерфейсыАннотации типов и объединённые типыПозднее статическое связываниеПовторение — обработчик платежей9Трейты
Введение в трейтыИспользование нескольких трейтовРазрешение конфликтов трейтовАбстрактные методы в трейтахТрейты и наследование12Паттерны проектирования, часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн ObserverПаттерн StrategyПотренируйтесь самостоятельно: Онлайн-компилятор PHP