Menu
Coddy logo textTech

Tests et intégration

Fait partie de la section Object Oriented Programming du Journey Python de Coddy. Leçon 60 sur 64.

challenge icon

Défi

Moyen

Dans ce défi, vous allez implémenter un système de bibliothèque multi-fichiers avec une couverture de test complète. Vous travaillerez avec trois fichiers en lecture seule et un fichier modifiable qui contient des commentaires TODO détaillés guidant votre implémentation :

  • book.py - Contient la définition de la classe Book
  • user.py - Contient la classe User que vous devez implémenter
  • library.py - Contient la définition de la classe Library

Essayez vous-même

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

# Gestionnaire de cas de 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")
    
    # Ajouter des livres et des utilisateurs
    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)
    
    # Emprunter des livres
    library.borrow_book("123456", "U001")
    library.borrow_book("789012", "U001")
    library.borrow_book("345678", "U001")
    
    print(f"Books borrowed before: {len(user.books_borrowed)}")
    
    # Retourner tous les livres
    num_returned = user.return_all_books(library)
    
    print(f"Books returned: {num_returned}")
    print(f"Books borrowed after: {len(user.books_borrowed)}")
    
    # Vérifier si tous les livres sont disponibles
    for book in library.books:
        print(f"Book {book.isbn} available: {book.available}")

elif test_case == "return_some_books":
    library = Library("Community Library")
    
    # Ajouter des livres et des utilisateurs
    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)
    
    # Emprunter un seul livre
    library.borrow_book("123456", "U001")
    
    print(f"Books borrowed before: {len(user.books_borrowed)}")
    
    # Retourner tous les livres
    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)}")
    
    # Retourner tous les livres (devrait être 0)
    num_returned = user.return_all_books(library)
    
    print(f"Books returned: {num_returned}")

elif test_case == "multiple_users":
    library = Library("Community Library")
    
    # Ajouter des livres
    library.add_book(Book("The Great Gatsby", "F. Scott Fitzgerald", "123456"))
    library.add_book(Book("To Kill a Mockingbird", "Harper Lee", "789012"))
    
    # Ajouter des utilisateurs
    user1 = User("U001", "Alice")
    user2 = User("U002", "Bob")
    library.add_user(user1)
    library.add_user(user2)
    
    # Emprunter des livres
    library.borrow_book("123456", "U001")
    library.borrow_book("789012", "U002")
    
    print(user1)
    print(user2)
    
    # Retourner tous les livres pour 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")
    
    # Ajouter un livre et un utilisateur
    library.add_book(Book("The Great Gatsby", "F. Scott Fitzgerald", "123456"))
    user = User("U001", "Alice")
    library.add_user(user)
    
    # Tenter d'emprunter un livre inexistant
    result = library.borrow_book("999999", "U001")
    print(result)
    
    # Tenter d'emprunter pour un utilisateur inexistant
    result = library.borrow_book("123456", "U999")
    print(result)
    
    # Emprunter un livre existant
    result = library.borrow_book("123456", "U001")
    print(result)
    
    # Tenter d'emprunter à nouveau le même livre
    result = library.borrow_book("123456", "U001")
    print(result)
    
    # Tenter de retourner un livre qui n'a pas été emprunté
    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)
    
    # Ajouter 100 livres
    for i in range(1, 101):
        isbn = f"{i:03d}"  # Formater comme 001, 002, etc.
        library.add_book(Book(f"Book {i}", f"Author {i}", isbn))
        library.borrow_book(isbn, "U001")
    
    print(f"Books borrowed: {len(user.books_borrowed)}")
    
    # Retourner tous les livres
    num_returned = user.return_all_books(library)
    
    print(f"Books returned: {num_returned}")
    print(f"Books borrowed after: {len(user.books_borrowed)}")

Toutes les leçons de Object Oriented Programming

Entraînez-vous par vous-même : Compilateur Python en ligne