Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

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

جزء من قسم Object Oriented Programming في رحلة Python على Coddy — الدرس 60 من 64.

challenge icon

التحدي

متوسط

في هذا التحدي، ستقوم بتنفيذ نظام مكتبة متعدد الملفات مع تغطية اختبار شاملة. ستعمل مع ثلاثة ملفات للقراءة فقط وملف واحد قابل للتعديل يحتوي على تعليقات TODO مفصلة توجهك في التنفيذ:

  • book.py - يحتوي على تعريف فئة Book
  • user.py - يحتوي على فئة User التي تحتاج إلى تنفيذها
  • library.py - يحتوي على تعريف فئة Library

ورقة مرجعية

يتضمن هذا التحدي تنفيذ نظام مكتبة متعدد الملفات يتكون من ثلاثة مكونات رئيسية:

  • book.py - تعريف فئة Book
  • user.py - تنفيذ فئة User
  • library.py - تعريف فئة Library

يجب أن يتضمن التنفيذ تغطية اختبارية شاملة واتباع تعليقات TODO الموجودة في كل ملف.

جرّب بنفسك

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

جميع دروس Object Oriented Programming