JUnit في Java
تحقق أن دالة صغيرة تُرجع القيمة التي أردتها. في SumCheck.java أبقِ Sum بصلاحية package-private مع add، أبقِ الصنف العام SumCheck، علّم دالة بـ@Test، واستدعِ assertEquals(5, Sum.add(2, 3));. عندما يكون 2 + 3 هو 5، ينجح الفحص. عرض ثانٍ يتحقق من Sum.add(4, 5) مقابل 9. اترك JAR الاختياري للصفحة التالية. هذا الدرس فحص JUnit مع assertEquals، وليس طباعة وصول Records وليس خط أنابيب Streams.
فحص يريد 5
افتح SumCheck.java. أبقِ اسم الصنف العام SumCheck. احذف عروض Card المتبقية في Records، وخطوط Pipe المتبقية في Streams، ومسارات Cue المتبقية في lambda، وطلبات Scanner المتبقية في Box إن دفنت قصة JUnit. ملف التعليم هو صنف اختبار، وليس main يطبع oak.
أضف الاستيرادات في الأعلى:
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
أبقِ مساعداً صغيراً في نفس الملف:
class Sum {
static int add(int left, int right) {
return left + right;
}
}
داخل SumCheck اكتب دالة اختبار:
@Test
void addsTwoAndThree() {
assertEquals(5, Sum.add(2, 3));
}
@Test يعلّم الدالة كفحص يجب أن ينفّذه المشغّل. assertEquals يأخذ القيمة المتوقعة أولاً ثم الفعلية. هنا المتوقع 5 والفعلي Sum.add(2, 3). يتطابقان، فينجح الفحص.
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
class Sum {
static int add(int left, int right) {
return left + right;
}
}
public class SumCheck {
@Test
void addsTwoAndThree() {
assertEquals(5, Sum.add(2, 3));
}
}
جمّع وشغّل هذا الملف بمشغّل JUnit 5 على classpath — زر اختبار في المحرر، أو مشغّل وحدة تحكم يختار الصنف SumCheck. عادة الدورة ما زالت «جمّع مصدر الاختبار، ثم نفّذ الفحوص». على هذه الصفحة لا تشغّل java SumCheck كبرنامج main عادي. لا تطبع t.name(). تطلب من المشغّل تنفيذ دوال @Test.
امشِ الفحص مرة. Sum.add(2, 3) يُرجع 5. assertEquals(5, ...) يقارن ذلك 5 مع المتوقع 5. يتطابقان. ينجح الفحص. قد يظهر سطر تقرير نتيجة خضراء أو ملخص نجاح قصير حسب المشغّل. الحقيقة التعليمية المهمة أن المتوقع والفعلي اتفقا.
قل قاعدة المبتدئ وأنت تنظر للدالة: @Test يعلّم الفحص؛ assertEquals(expected, actual) يقارن؛ سمِّ الدالة ليقرأها إنسان. لا تخترع عروض تغليف JAR على هذه الصفحة. JAR ينتظر الدرس الاختياري التالي. لا تعامل فحصاً فاشلاً مقابل 9 كالعرض الأول — العرض الأول يريد 5.
إن رأيت ما زال oak من ملف Card متبقٍ في Records، انتقل إلى SumCheck وأبقِ assertEquals(5, Sum.add(2, 3));. إن لم يجد المشغّل اختبارات، تأكد أن الدالة لديها @Test وليست private بطريقة يرفضها مشغّلك.
فحص ثانٍ يريد 9
أبقِ نفس الصنف العام SumCheck ونفس المساعد Sum. غيّر جسم الاختبار للتحقق من مجموع آخر:
@Test
void addsFourAndFive() {
assertEquals(9, Sum.add(4, 5));
}
4 + 5 هو 9. المتوقع 9. الفعلي Sum.add(4, 5). يتطابقان، فينجح هذا الفحص أيضاً. أبقِ فحصاً واضحاً لكل شكل تعليمي على هذه الصفحة حتى يبقى الرقم المتوقع سهلاً للتسمية.
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
class Sum {
static int add(int left, int right) {
return left + right;
}
}
public class SumCheck {
@Test
void addsFourAndFive() {
assertEquals(9, Sum.add(4, 5));
}
}
امشِ الفحص مرة. Sum.add(4, 5) يُرجع 9. assertEquals(9, ...) يقارن المتوقع والفعلي. يتطابقان. ينجح الفحص. أبقِ العرضين كشكلين تعليميين. أولاً أثبت فحصاً يريد 5. ثم فحصاً يريد 9. يشتركان في استيرادات JUnit، المساعد Sum، و@Test.
لو قارن العرض الأول Sum.add(2, 3) مع 9، يفشل الفحص لأن 5 ليس 9. ذلك البرنامج الفاشل ليس الملف التعليمي الأول. الملف التعليمي الأول يريد 5.
JUnit ليس Records وليس JAR
Records احتفظت بمكوّنات مضغوطة طبعتها بوصولات. JUnit يفحص نتيجة مقابل قيمة توقعتها. JAR سيغلّف ملفات الأصناف للإرسال في صفحة اختيارية لاحقة. لا تخلط هذه المهام الثلاث في ملف مبتدئ واحد اليوم.
5 هنا القيمة المتوقعة في assertEquals. ليست t.n() من record Tag وليست نتيجة map في stream. عندما ملف Card متبقٍ ما زال يطبع oak، اتركه تاريخاً وأبقِ سطر assertion في SumCheck.
بدون @Test، كثير من المشغّلات لن تنفّذ الدالة كفحص. بدون assertEquals، لا مقارنة في هذا الشكل التعليمي. أبقِ الاثنين. أبقِ أوامر JAR بعيدة عن هذه الصفحة حتى ذلك الدرس.
عادات المشغّل وclasspath
أنواع JUnit تعيش في حزم org.junit.jupiter.api. يجب أن يضع المحرر أو أداة البناء تلك الـjars على classpath للتجميع والتشغيل. المبتدئون غالباً يلصقون صنف الاختبار صحيحاً وما زالوا يرون «package does not exist» عند غياب الـjars — أصلح classpath، وليس تهجئة @Test.
أبقِ Sum package-private في نفس الملف ليبقى صنف عام واحد هو SumCheck. أبقِ القيم المتوقعة حرفيات واضحة في assertEquals. أبقِ أسماء الدوال مقروءة. أبقِ System.out.println العادي خارج فحوص التعليم إلا إذا تصححت لاحقاً بنفسك.
إن فشل التجميع على org.junit، سطر الاستيراد سليم والمكتبة غائبة من classpath. إن قال المشغّل صفر اختبارات، ابحث عن @Test ناقص أو اسم صنف لم تختره.
فحص المجلد قبل JAR
اسرد المجلد بعد تجميع ناجح مع توفر jars JUnit. يجب أن ترى SumCheck.class وعادة Sum.class بجانب المصدر. حرّر المصدر، احفظ، جمّع مجدداً، ثم نفّذ الفحوص بنفس عادة المشغّل. صنف قديم قد يخفي قيمة متوقعة غيّرتها إن تخطيت التجميع بعد التحرير.
إن اشتكى javac من أصناف عامة مكررة، أبقِ SumCheck فقط عاماً. إن فشل فحص بعد كتابة assertEquals(9, Sum.add(2, 3))، ذلك عدم التطابق حقيقي — أعد الزوج المطابق للعرض الذي تريد الإبقاء عليه.
لا تلصق record Tag من Card داخل SumCheck. لا تستبدل assertEquals بـstream().map من Pipe. عمل JUnit الاختياري فحص معلَّم يقارن المتوقع والفعلي.
قبل JAR الاختياري
يمكنك الإبقاء على الصنف العام SumCheck، المساعد Sum.add، استيراد @Test وassertEquals من JUnit، التحقق من Sum.add(2, 3) مقابل 5، ثم Sum.add(4, 5) مقابل 9. جمّع مع JUnit على classpath ونفّذ الفحوص بمشغّل JUnit 5. الصفحة الاختيارية التالية هي JAR.
أبقِ عروض SumCheck لزوج assertion واضح. أبقِ ملفات Card في Records بعيدة عن هذه الصفحة عند ممارسة JUnit. أبقِ ملفات Pipe في Streams بعيدة عن هذه الصفحة عند ممارسة JUnit. أبقِ عمل JAR بعيداً حتى ذلك الدرس. هذه العادات نقطة تفتيش قبل المتابعة. حين يريد الفحص الأول 5 وينجح، أو يريد الثاني 9 وينجح، أنجز JUnit عمل هذا الدرس وأنت جاهز لـJAR إن تابعت المسار الاختياري.
مرور أخير على المجلد: SumCheck عامة واحدة، Sum package-private، @Test موجود، assertEquals(expected, actual) متوافق، استيرادات JUnit موجودة، بلا انتظار Scanner، بلا خط أنابيب stream مطلوب. جمّع ونفّذ الفحوص مرة أخرى على العرض المفتوح. إن ما زال المتوقع والفعلي متطابقين، شكل JUnit متين ويمكن للدورة الانتقال إلى JAR الاختياري في الصفحة التالية. فضّل عادة assertion واضحة لكل قراءة ليعلّم كل مرور نفس الخريطة.
🧠 اختبر معرفتك
اختبر معرفتك
تحدى نفسك مع هذا الاختبار التفاعلي واكتشف مدى فهمك للموضوع
📝 التعليمات
- اقرأ كل سؤال بعناية
- اختر أفضل إجابة لكل سؤال
- يمكنك إعادة الاختبار عدة مرات كما تريد
- سيتم عرض تقدمك في الأعلى