اختبار الوحدات (NUnit/xUnit)
جزء من قسم البرمجة كائنية التوجه في رحلة C# على Coddy. الدرس 67 من 70.
التحدي
سهللنُكمل مشروع نظام المكتبة بإضافة اختبارات الوحدة! يُعد الاختبار ضروريًا للتأكد من أن شيفرتك تعمل على النحو الصحيح وتستمر في العمل عند إجراء تغييرات عليها. ستنشئ ملف اختبار مخصصًا يتحقق من الوظائف الأساسية لنظام مكتبتك.
ستتابع العمل باستخدام بنية مشروعك الحالية، مع إضافة ملف اختبار جديد:
Book.cs: احتفظ بفئة Book التي تتضمنIdوTitleوAuthorوIsAvailableوالطريقتينBorrow()وReturn().User.cs: احتفظ بفئة User التي تتضمن تتبّع الاستعارة، والثابتMaxBooks، والطريقةCanBorrow()، وطرق إدارة الكتب المستعارة.Library.cs: احتفظ بفئة Library التي تتضمن منطق الاستعارة وطرق البحث والطريقتينGetAllBooks()وGetAllUsers().LibraryTests.cs: هذا هو ملف الاختبار الجديد! أنشئ فئة اختبار تتحقق من أن نظام مكتبتك يعمل على النحو الصحيح. ستكتب طرق اختبار تتحقق من سيناريوهات مختلفة وتُظهر ما إذا كان كل اختبار قد نجح أم أخفق.Program.cs: نقطة الدخول التي تشغّل الاختبارات وتعرض النتائج.
ينبغي أن تتضمن فئة الاختبار طرقًا تختبر السيناريوهات التالية:
TestBookBorrow- تحقّق من نجاح استعارة كتاب متاح ومن تغيّر حالة توفرهTestBookBorrowUnavailable- تحقّق من إخفاق محاولة استعارة كتاب مستعار بالفعل على النحو المناسبTestUserBorrowingLimit- تحقّق من عدم قدرة المستخدمين على استعارة أكثر من 3 كتبTestBookReturn- تحقّق من أن إعادة كتاب مستعار تتم على النحو الصحيحTestSearchByAuthor- تحقّق من أن البحث حسب المؤلف يعرض الكتب الصحيحة
ينبغي أن تُعيد كل طريقة اختبار قيمة منطقية تشير إلى نجاح الاختبار. أنشئ مشغّل اختبارات بسيطًا ينفّذ جميع الاختبارات ويطبع النتائج.
ستتلقى المدخلات التالية:
- عدد سيناريوهات الاختبار المطلوب تشغيلها (1-5، وفقًا للاختبارات المذكورة أعلاه)
لكل اختبار يتم تشغيله، اطبع النتيجة بالتنسيق التالي:
{TestName}: {PASS|FAIL}بعد اكتمال جميع الاختبارات، اطبع ملخصًا:
--- Test Summary ---
Passed: {count}
Failed: {count}
Total: {count}على سبيل المثال، إذا كان الإدخال هو:
3فينبغي أن يكون الإخراج:
TestBookBorrow: PASS
TestBookBorrowUnavailable: PASS
TestUserBorrowingLimit: PASS
--- Test Summary ---
Passed: 3
Failed: 0
Total: 3ومثال آخر عند تشغيل الاختبارات الخمسة كلها:
5ينبغي أن يكون الإخراج:
TestBookBorrow: PASS
TestBookBorrowUnavailable: PASS
TestUserBorrowingLimit: PASS
TestBookReturn: PASS
TestSearchByAuthor: PASS
--- Test Summary ---
Passed: 5
Failed: 0
Total: 5ينبغي أن تنشئ اختباراتك نسخًا جديدة من Book وUser وLibrary لكل اختبار لضمان العزل. بهذه الطريقة، لا تؤثر حالة أحد الاختبارات في اختبار آخر. فكّر في كل اختبار على أنه تحقق مستقل من سلوك محدد في نظامك!
جرّب بنفسك
using System;
namespace LibrarySystem
{
class Program
{
public static void Main(string[] args)
{
// اقرأ عدد الاختبارات المطلوب تشغيلها
int numTests = Convert.ToInt32(Console.ReadLine());
// TODO: أنشئ كائنًا من LibraryTests وشغّل أول numTests اختبارًا
}
}
}
جميع دروس البرمجة كائنية التوجه
1أساسيات OOP
الملفات الخارجيةNamespaces والتوجيهاتمقدمة في Classes و Objectsالكلمة المفتاحية 'this'Methods والمعاملاتFields مقابل PropertiesConstructorsObject Initializersمراجعة - آلة حاسبة بسيطة4الوراثة
صيغة الوراثة الأساسية (:)الكلمة المفتاحية 'base'الكلمات المفتاحية Virtual و Overrideالأصناف المختومة (Sealed Classes)الفئة الأساسية 'object'مراجعة - هيكلية الموظفين7ميزات متقدمة
تحميل العوامل (Operator Overloading)المفهرسات (Indexers (this[]))إعادة تعريف ()ToStringدوال التوسعة (Extension Methods)ملخص - Custom List2الخصائص والأعضاء الساكنة (Static Members)
الخصائص المطبقة تلقائيًا (Auto-Implemented Properties)خصائص القراءة فقط والكتابة فقطالحقول والدوال الساكنة (Static)الفئات الساكنة (Static Classes)الأعضاء ذات البنية التعبيرية (Expression-Bodied Members)5تعدد الأشكال والواجهات (Polymorphism & Interfaces)
تعدد الأشكال: وقت التجميع مقابل وقت التشغيلالواجهة مقابل الفئة المجردة (Abstract Class)الواجهات المتعددةالواجهات الصريحةUpcasting و Downcastingملخص - حاسبة الأشكال8مفاهيم البرمجة كائنية التوجه (OOP) المتقدمة
التركيب بدلاً من الوراثةالـ Generics (الأصناف والدوال)الـ Delegates والأحداثالـ Attributes والـ Reflectionواجهة IDisposable وجملة usingأساسيات Dependency Injection3بنية الكلاسات
بيانات الـ Instance مقابل البيانات الـ Staticالكلمات المفتاحية 'readonly' و 'const'الحقول الخلفية (Backing Fields)مراجعة - مدير الحساب البنكي6التغليف
معدلات الوصولالخصائص من أجل التغليفتنفيذ إخفاء البياناتأنماط عدم القابلية للتغييرمراجعة - سجلات الطلاب12مشروع: نظام المكتبة
هيكلة المشروعنماذج الكتاب والمستخدممنطق نظام الاستعارةLINQ للبحثواجهة Console / واجهة المسؤولاختبار الوحدات (NUnit/xUnit)تدرّب بنفسك: مترجم C# عبر الإنترنت