Menu
Coddy logo textTech

בדיקות ואינטגרציה

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Python של Coddy. שיעור 60 מתוך 64.

challenge icon

אתגר

בינוני

באתגר הזה תממש מערכת ספרייה מרובת קבצים עם כיסוי בדיקות מקיף. תעבוד עם שלושה קבצים לקריאה בלבד וקובץ אחד שניתן לעריכה, המכיל הערות TODO מפורטות שינחו אותך במימוש:

  • book.py - מכיל את הגדרת המחלקה Book
  • user.py - מכיל את המחלקה User שעליך לממש
  • library.py - מכיל את הגדרת המחלקה Library

נסו בעצמכם

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)}")

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר Python אונליין