בדיקות ואינטגרציה
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Python של Coddy. שיעור 60 מתוך 64.
אתגר
בינוניבאתגר הזה תממש מערכת ספרייה מרובת קבצים עם כיסוי בדיקות מקיף. תעבוד עם שלושה קבצים לקריאה בלבד וקובץ אחד שניתן לעריכה, המכיל הערות 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)}")כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים (OOP)
קבצים חיצונייםמבוא ל-OOPמחלקות לעומת אובייקטיםהפרמטר selfמתודותמאפייניםשיטת הבנאי (__init__)חזרה: מחשבון פשוט5פולימורפיזם
בחינה מחדש של דריסת מתודותטיפוסיות ברווזמחלקות ומתודות אבסטרקטיותעיצוב ממשקיםסיכום – מחשבון צורות8מושגים מתקדמים בתכנות מונחה עצמים
קומפוזיציה לעומת הורשהMixinsמתודות סטטיות ומתודות מחלקהדקורטורים למחלקותמנהלי הקשר6כימוס
איברים ציבוריים, מוגנים ופרטייםמשני גישההסתרת מידעדקורטורים מתקדמים של Propertyחזרה - מערכת רישומי תלמידים12פרויקט: ניהול ספרייה
סקירת הפרויקטמחלקות ספר ומשתמשמערכת השאלת ספריםיכולת חיפושממשק מנהלבדיקות ואינטגרציהתרגלו בעצמכם: קומפיילר Python אונליין