Menu
Coddy logo textTech

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

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

challenge icon

Задание

Легко

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

Вы распределите свой код по пяти файлам:

  • Book.php — Ваш класс Book со свойствами только для чтения (isbn, title, author), приватным свойством $isAvailable и методами: isAvailable(), markAsBorrowed() и markAsReturned().
  • User.php — Подключите файл Book. Ваш класс User со свойствами только для чтения (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", Title: "PHP Fundamentals", Author: "Sarah Johnson"
    • ISBN: "978-1", Title: "OOP Patterns", Author: "Mike Chen"
    • ISBN: "978-2", Title: "Web Security", Author: "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: Пусть администратор добавит три книги:
// - 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. Пусть пользователь возьмет книгу "978-0"
// 2. Пусть пользователь возьмет книгу "978-1"
// 3. Выполнить поиск по автору, используя $searchAuthor, и вывести: "Books by author: [count]"
// 4. Получить список доступных книг и вывести: "Available: [count]"
// 5. Пусть пользователь вернет книгу "978-0"
// 6. Снова получить список доступных книг и вывести: "Available after return: [count]"
// 7. Пусть администратор удалит книгу "978-0"
// 8. Пусть администратор попытается удалить книгу "978-0" снова

?>

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