الاختبار والتكامل
جزء من قسم البرمجة كائنية التوجه في رحلة 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
الملفات الخارجيةمقدمة في OOPClasses مقابل Objectsمعامل selfMethodsAttributesدالة البناء (__init__)مراجعة - آلة حاسبة بسيطة4الوراثة
الوراثة الأساسيةدالة ()superإعادة تعريف الدوال (Method Overriding)الوراثة المتعددةترتيب استدعاء الدوال (Method Resolution Order)مراجعة - هيكلية الموظفين5تعدد الأشكال
مراجعة إعادة تعريف الدوالمفهوم Duck Typingالأصناف والدوال المجردةتصميم الواجهاتملخص - حاسبة الأشكال3خصائص الـ Class
متغيرات الـ Instance مقابل متغيرات الـ ClassProperty Decoratorsالسمات الخاصةمراجعة - مدير الحساب البنكي6التغليف (Encapsulation)
الأعضاء العامة والمحمية والخاصةمحددات الوصولإخفاء المعلوماتProperty Decorators متقدمةمراجعة - نظام سجلات الطلاب12مشروع: إدارة المكتبة
نظرة عامة على المشروعفئات الكتاب والمستخدمنظام الاستعارةخاصية البحثواجهة المسؤولالاختبار والتكاملتدرّب بنفسك: مترجم Python عبر الإنترنت