Menu
Coddy logo textTech

Тестирование и интеграция

Часть раздела Объектно-ориентированное программирование путешествия по PHP на Coddy. Урок 87 из 91.

challenge icon

Задание

Легко

Поздравляем с созданием полноценной системы управления библиотекой! Теперь пришло время объединить все компоненты и убедиться, что всё работает без сбоев. Ты создашь комплексный интеграционный тест, который проверит весь рабочий процесс твоей библиотеки.

Ты организуешь код в пяти файлах:

  • 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 с ID 1 и именем "LibraryAdmin"
    • Создай User с ID 2 и предоставленным именем пользователя

    Пусть администратор добавит эти три книги:

    • ISBN: "978-0", название: "PHP Fundamentals", автор: "Sarah Johnson"
    • ISBN: "978-1", название: "OOP Patterns", автор: "Mike Chen"
    • ISBN: "978-2", название: "Web Security", автор: "Sarah Johnson"

    Затем выполни следующую последовательность интеграционного теста, выводя каждый результат с новой строки:

    1. Пусть пользователь возьмёт "978-0"
    2. Пусть пользователь возьмёт "978-1"
    3. Выполни поиск по автору, используя второе входное значение, и выведи количество: "Books by author: [count]"
    4. Получи доступные книги и выведи: "Available: [count]"
    5. Пусть пользователь вернёт "978-0"
    6. Снова получи доступные книги и выведи: "Available after return: [count]"
    7. Пусть администратор удалит "978-0"
    8. Пусть администратор снова попытается удалить "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" снова

?>

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Онлайн-компилятор PHP