Menu
Coddy logo textTech

Test e integrazione

Fa parte della sezione Programmazione orientata agli oggetti del percorso Python di Coddy. Lezione 60 di 64.

challenge icon

Sfida

Medio

In questa sfida, implementerai un sistema di biblioteca composto da più file, con una copertura dei test completa. Lavorerai con tre file di sola lettura e un file modificabile che contiene commenti TODO dettagliati per guidarti nell'implementazione:

  • book.py - Contiene la definizione della classe Book
  • user.py - Contiene la classe User che devi implementare
  • library.py - Contiene la definizione della classe Library

Provalo tu

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

# Gestore dei casi di test
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")
    
    # Aggiungi libri e utenti
    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)
    
    # Prendi in prestito i libri
    library.borrow_book("123456", "U001")
    library.borrow_book("789012", "U001")
    library.borrow_book("345678", "U001")
    
    print(f"Books borrowed before: {len(user.books_borrowed)}")
    
    # Restituisci tutti i libri
    num_returned = user.return_all_books(library)
    
    print(f"Books returned: {num_returned}")
    print(f"Books borrowed after: {len(user.books_borrowed)}")
    
    # Verifica se tutti i libri sono disponibili
    for book in library.books:
        print(f"Book {book.isbn} available: {book.available}")

elif test_case == "return_some_books":
    library = Library("Community Library")
    
    # Aggiungi libri e utenti
    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)
    
    # Prendi in prestito un solo libro
    library.borrow_book("123456", "U001")
    
    print(f"Books borrowed before: {len(user.books_borrowed)}")
    
    # Restituisci tutti i libri
    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)}")
    
    # Restituisci tutti i libri (dovrebbe essere 0)
    num_returned = user.return_all_books(library)
    
    print(f"Books returned: {num_returned}")

elif test_case == "multiple_users":
    library = Library("Community Library")
    
    # Aggiungi libri
    library.add_book(Book("The Great Gatsby", "F. Scott Fitzgerald", "123456"))
    library.add_book(Book("To Kill a Mockingbird", "Harper Lee", "789012"))
    
    # Aggiungi utenti
    user1 = User("U001", "Alice")
    user2 = User("U002", "Bob")
    library.add_user(user1)
    library.add_user(user2)
    
    # Prendi in prestito i libri
    library.borrow_book("123456", "U001")
    library.borrow_book("789012", "U002")
    
    print(user1)
    print(user2)
    
    # Restituisci tutti i libri di 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")
    
    # Aggiungi un libro e un utente
    library.add_book(Book("The Great Gatsby", "F. Scott Fitzgerald", "123456"))
    user = User("U001", "Alice")
    library.add_user(user)
    
    # Prova a prendere in prestito un libro inesistente
    result = library.borrow_book("999999", "U001")
    print(result)
    
    # Prova a prendere in prestito un libro per un utente inesistente
    result = library.borrow_book("123456", "U999")
    print(result)
    
    # Prendi in prestito un libro esistente
    result = library.borrow_book("123456", "U001")
    print(result)
    
    # Prova a prendere di nuovo in prestito lo stesso libro
    result = library.borrow_book("123456", "U001")
    print(result)
    
    # Prova a restituire un libro che non era stato preso in prestito
    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)
    
    # Aggiungi 100 libri
    for i in range(1, 101):
        isbn = f"{i:03d}"  # Formatta come 001, 002, ecc.
        library.add_book(Book(f"Book {i}", f"Author {i}", isbn))
        library.borrow_book(isbn, "U001")
    
    print(f"Books borrowed: {len(user.books_borrowed)}")
    
    # Restituisci tutti i libri
    num_returned = user.return_all_books(library)
    
    print(f"Books returned: {num_returned}")
    print(f"Books borrowed after: {len(user.books_borrowed)}")

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Python online