الاختبار والتكامل
جزء من قسم Object Oriented Programming في رحلة Python على Coddy — الدرس 60 من 64.
التحدي
متوسطفي هذا التحدي، ستقوم بتنفيذ نظام مكتبة متعدد الملفات مع تغطية اختبار شاملة. ستعمل مع ثلاثة ملفات للقراءة فقط وملف واحد قابل للتعديل يحتوي على تعليقات 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
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مشروع: إدارة المكتبة
نظرة عامة على المشروعفئات الكتاب والمستخدم