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

اختبار الوحدات (NUnit/xUnit)

جزء من قسم البرمجة كائنية التوجه في رحلة C# على Coddy. الدرس 67 من 70.

challenge icon

التحدي

سهل

لنُكمل مشروع نظام المكتبة بإضافة اختبارات الوحدة! يُعد الاختبار ضروريًا للتأكد من أن شيفرتك تعمل على النحو الصحيح وتستمر في العمل عند إجراء تغييرات عليها. ستنشئ ملف اختبار مخصصًا يتحقق من الوظائف الأساسية لنظام مكتبتك.

ستتابع العمل باستخدام بنية مشروعك الحالية، مع إضافة ملف اختبار جديد:

  • 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 اختبارًا
        }
    }
}

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم C# عبر الإنترنت