Menu
Coddy logo textTech

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

Часть раздела Object Oriented Programming путешествия по Python на Coddy — урок 60 из 64.

challenge icon

Задание

Средне

В этом испытании вы реализуете многофайловую библиотечную систему с полным тестовым покрытием. Вы будете работать с тремя файлами только для чтения и одним редактируемым файлом, который содержит подробные комментарии TODO, направляющие вашу реализацию:

  • book.py — содержит определение класса Book
  • user.py — содержит класс User, который вам необходимо реализовать
  • library.py — содержит определение класса Library

Шпаргалка

Эта задача включает в себя реализацию многофайловой библиотечной системы с тремя основными компонентами:

  • book.py — определение класса Book
  • user.py — реализация класса User
  • library.py — определение класса Library

Реализация должна включать полное тестовое покрытие и следовать комментариям TODO, представленным в каждом файле.

Попробуйте сами

from book import Book
from user import User
from library import Library

# Обработчик тестовых случаев
test_case = input()

if test_case == "create_user":
    user_id = "1"
    name = "Name"
    
    user = User(user_id, name)
    print(user)
    print(f"Books borrowed: {len(user.books_borrowed)}")

elif test_case == "borrow_and_return_all":
    library = Library("Community Library")
    
    # Добавление книг и пользователей
    library.add_book(Book("The Great Gatsby", "F. Scott Fitzgerald", "123456"))
    library.add_book(Book("To Kill a Mockingbird", "Harper Lee", "789012"))
    library.add_book(Book("1984", "George Orwell", "345678"))
    
    user = User("U001", "Alice")
    library.add_user(user)
    
    # Взятие книг
    library.borrow_book("123456", "U001")
    library.borrow_book("789012", "U001")
    library.borrow_book("345678", "U001")
    
    print(f"Books borrowed before: {len(user.books_borrowed)}")
    
    # Возврат всех книг
    num_returned = user.return_all_books(library)
    
    print(f"Books returned: {num_returned}")
    print(f"Books borrowed after: {len(user.books_borrowed)}")
    
    # Проверка доступности всех книг
    for book in library.books:
        print(f"Book {book.isbn} available: {book.available}")

elif test_case == "return_some_books":
    library = Library("Community Library")
    
    # Добавление книг и пользователей
    book1 = Book("The Great Gatsby", "F. Scott Fitzgerald", "123456")
    book2 = Book("To Kill a Mockingbird", "Harper Lee", "789012")
    library.add_book(book1)
    library.add_book(book2)
    
    user = User("U001", "Alice")
    library.add_user(user)
    
    # Взятие только одной книги
    library.borrow_book("123456", "U001")
    
    print(f"Books borrowed before: {len(user.books_borrowed)}")
    
    # Возврат всех книг
    num_returned = user.return_all_books(library)
    
    print(f"Books returned: {num_returned}")
    print(f"Books borrowed after: {len(user.books_borrowed)}")

elif test_case == "empty_return":
    library = Library("Community Library")
    
    user = User("U001", "Alice")
    library.add_user(user)
    
    print(f"Books borrowed: {len(user.books_borrowed)}")
    
    # Возврат всех книг (должно быть 0)
    num_returned = user.return_all_books(library)
    
    print(f"Books returned: {num_returned}")

elif test_case == "multiple_users":
    library = Library("Community Library")
    
    # Добавление книг
    library.add_book(Book("The Great Gatsby", "F. Scott Fitzgerald", "123456"))
    library.add_book(Book("To Kill a Mockingbird", "Harper Lee", "789012"))
    
    # Добавление пользователей
    user1 = User("U001", "Alice")
    user2 = User("U002", "Bob")
    library.add_user(user1)
    library.add_user(user2)
    
    # Взятие книг
    library.borrow_book("123456", "U001")
    library.borrow_book("789012", "U002")
    
    print(user1)
    print(user2)
    
    # Возврат всех книг для user1
    num_returned = user1.return_all_books(library)
    
    print(f"Books returned by {user1.name}: {num_returned}")
    
    print(user1)
    print(user2)

elif test_case == "error_handling":
    library = Library("Community Library")
    
    # Добавление книги и пользователя
    library.add_book(Book("The Great Gatsby", "F. Scott Fitzgerald", "123456"))
    user = User("U001", "Alice")
    library.add_user(user)
    
    # Попытка взять несуществующую книгу
    result = library.borrow_book("999999", "U001")
    print(result)
    
    # Попытка взять книгу для несуществующего пользователя
    result = library.borrow_book("123456", "U999")
    print(result)
    
    # Взятие существующей книги
    result = library.borrow_book("123456", "U001")
    print(result)
    
    # Попытка взять ту же книгу снова
    result = library.borrow_book("123456", "U001")
    print(result)
    
    # Попытка вернуть книгу, которая не была взята
    result = library.return_book("789012", "U001")
    print(result)

elif test_case == "stress_test":
    library = Library("Community Library")
    
    user = User("U001", "Alice")
    library.add_user(user)
    
    # Добавление 100 книг
    for i in range(1, 101):
        isbn = f"{i:03d}"  # Форматирование как 001, 002 и т.д.
        library.add_book(Book(f"Book {i}", f"Author {i}", isbn))
        library.borrow_book(isbn, "U001")
    
    print(f"Books borrowed: {len(user.books_borrowed)}")
    
    # Возврат всех книг
    num_returned = user.return_all_books(library)
    
    print(f"Books returned: {num_returned}")
    print(f"Books borrowed after: {len(user.books_borrowed)}")

Все уроки раздела Object Oriented Programming