Menu
Coddy logo textTech

Testen und Integration

Teil des Abschnitts Object Oriented Programming der Python-Journey von Coddy — Lektion 60 von 64.

challenge icon

Aufgabe

Mittel

In dieser Challenge implementierst du ein Bibliothekssystem bestehend aus mehreren Dateien mit umfassender Testabdeckung. Du arbeitest mit drei schreibgeschützten Dateien und einer bearbeitbaren Datei, die detaillierte TODO-Kommentare enthält, die dich bei der Implementierung unterstützen:

  • book.py - Enthält die Definition der Klasse Book
  • user.py - Enthält die Klasse User, die du implementieren musst
  • library.py - Enthält die Definition der Klasse Library

Spickzettel

Diese Herausforderung beinhaltet die Implementierung eines Bibliothekssystems aus mehreren Dateien mit drei Hauptkomponenten:

  • book.py - Definition der Klasse Book
  • user.py - Implementierung der Klasse User
  • library.py - Definition der Klasse Library

Die Implementierung sollte eine umfassende Testabdeckung beinhalten und den TODO-Kommentaren in jeder Datei folgen.

Probier es selbst

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

# Testfall-Handler
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")
    
    # Bücher und Benutzer hinzufügen
    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)
    
    # Bücher ausleihen
    library.borrow_book("123456", "U001")
    library.borrow_book("789012", "U001")
    library.borrow_book("345678", "U001")
    
    print(f"Books borrowed before: {len(user.books_borrowed)}")
    
    # Alle Bücher zurückgeben
    num_returned = user.return_all_books(library)
    
    print(f"Books returned: {num_returned}")
    print(f"Books borrowed after: {len(user.books_borrowed)}")
    
    # Überprüfen, ob alle Bücher verfügbar sind
    for book in library.books:
        print(f"Book {book.isbn} available: {book.available}")

elif test_case == "return_some_books":
    library = Library("Community Library")
    
    # Bücher und Benutzer hinzufügen
    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)
    
    # Nur ein Buch ausleihen
    library.borrow_book("123456", "U001")
    
    print(f"Books borrowed before: {len(user.books_borrowed)}")
    
    # Alle Bücher zurückgeben
    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)}")
    
    # Alle Bücher zurückgeben (sollte 0 sein)
    num_returned = user.return_all_books(library)
    
    print(f"Books returned: {num_returned}")

elif test_case == "multiple_users":
    library = Library("Community Library")
    
    # Bücher hinzufügen
    library.add_book(Book("The Great Gatsby", "F. Scott Fitzgerald", "123456"))
    library.add_book(Book("To Kill a Mockingbird", "Harper Lee", "789012"))
    
    # Benutzer hinzufügen
    user1 = User("U001", "Alice")
    user2 = User("U002", "Bob")
    library.add_user(user1)
    library.add_user(user2)
    
    # Bücher ausleihen
    library.borrow_book("123456", "U001")
    library.borrow_book("789012", "U002")
    
    print(user1)
    print(user2)
    
    # Alle Bücher für user1 zurückgeben
    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")
    
    # Buch und Benutzer hinzufügen
    library.add_book(Book("The Great Gatsby", "F. Scott Fitzgerald", "123456"))
    user = User("U001", "Alice")
    library.add_user(user)
    
    # Versuchen, ein nicht existierendes Buch auszuleihen
    result = library.borrow_book("999999", "U001")
    print(result)
    
    # Versuchen, für einen nicht existierenden Benutzer auszuleihen
    result = library.borrow_book("123456", "U999")
    print(result)
    
    # Existierendes Buch ausleihen
    result = library.borrow_book("123456", "U001")
    print(result)
    
    # Versuchen, dasselbe Buch erneut auszuleihen
    result = library.borrow_book("123456", "U001")
    print(result)
    
    # Versuchen, ein Buch zurückzugeben, das nicht ausgeliehen wurde
    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 Bücher hinzufügen
    for i in range(1, 101):
        isbn = f"{i:03d}"  # Formatierung als 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)}")
    
    # Alle Bücher zurückgeben
    num_returned = user.return_all_books(library)
    
    print(f"Books returned: {num_returned}")
    print(f"Books borrowed after: {len(user.books_borrowed)}")

Alle Lektionen in Object Oriented Programming