Menu
CoddyTech
flag Ar iconالعربيةdown icon

الاختبار والتكامل

جزء من قسم البرمجة كائنية التوجه في رحلة 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 عبر الإنترنت