0Pricing
Kotlin Academy · درس

كتابة الاختبارات باستخدام JUnit5

نظّموا الاختبارات

كتابة الاختبارات باستخدام JUnit5 درس مجاني في Kotlin Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Kotlin Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Kotlin Academy 4 دروس في المجموع.

ما هو JUnit5؟

JUnit5 (JUnit Jupiter) هو إطار الاختبار القياسي لـ JVM وKotlin. ويوفّر تعليقات توضيحية لتحديد بنية رمز الاختبار وتنظيمها.

  • توجد الاختبارات في src/test/kotlin
  • كل اختبار عبارة عن دالة
  • ينفّذ المشغّل الاختبارات ويعرض النتائج

إضافة الاعتمادية

أضف JUnit Jupiter إلى إعداد الاختبار، وفعّل منصة JUnit.

dependencies {
    testImplementation("org.junit.jupiter:junit-jupiter:5.10.2")
}

tasks.test {
    useJUnitPlatform()
}

اختبارك الأول

أضف التعليق التوضيحي @Test إلى دالة. ويتحقق الاختبار من أمرٍ ما يتعلق بالرمز الخاص بك.

import org.junit.jupiter.api.Test
import org.junit.jupiter.api.Assertions.assertEquals

class MathTest {
    @Test
    fun addsTwoNumbers() {
        assertEquals(4, 2 + 2)
    }
}

أسماء اختبار وصفية

استخدم @DisplayName لإنشاء تقارير اختبارات سهلة القراءة، من دون الحاجة إلى أسماء دوال طويلة.

import org.junit.jupiter.api.Test
import org.junit.jupiter.api.DisplayName

class OrderTest {
    @Test
    @DisplayName("total includes tax")
    fun totalWithTax() {
        // ...
    }
}

الإعداد باستخدام @BeforeEach

يُنفّذ @BeforeEach قبل كل اختبار، ولذلك فهو مناسب لإنشاء تجهيزات اختبار جديدة. ويُنفّذ @AfterEach بعد كل اختبار لإجراء التنظيف.

import org.junit.jupiter.api.BeforeEach

class CartTest {
    private lateinit var cart: MutableList<String>
    @BeforeEach
    fun setUp() {
        cart = mutableListOf()
    }
}

الإعداد على مستوى الفئة

يُنفّذ @BeforeAll و@AfterAll مرة واحدة للفئة بأكملها. وفي Kotlin، يحتاجان إلى كائن مرافق يتضمن @JvmStatic (أو إلى دورة حياة لكل فئة).

import org.junit.jupiter.api.BeforeAll

class DbTest {
    companion object {
        @BeforeAll
        @JvmStatic
        fun connect() {
            // open shared connection
        }
    }
}

الترتيب والتنفيذ والتحقق

نظّم كل اختبار ضمن ثلاث مراحل واضحة:

  • الترتيب — إعداد المدخلات والحالة
  • التنفيذ — استدعاء الرمز قيد الاختبار
  • التحقق — التحقق من النتيجة

يساعد ذلك في إبقاء الاختبارات سهلة القراءة ومركّزة.

الاختبارات المتداخلة

يجمع @Nested الاختبارات المرتبطة، وينتج تقريرًا على شكل شجرة يوثّق السلوك.

import org.junit.jupiter.api.Nested
import org.junit.jupiter.api.Test

class StackTest {
    @Nested
    inner class WhenEmpty {
        @Test fun isEmpty() { /* ... */ }
    }
}

الاختبارات ذات المعلمات

شغّل الاختبار نفسه باستخدام مدخلات متعددة عبر @ParameterizedTest ومصدر للقيم.

import org.junit.jupiter.params.ParameterizedTest
import org.junit.jupiter.params.provider.ValueSource
import org.junit.jupiter.api.Assertions.assertTrue

class NumberTest {
    @ParameterizedTest
    @ValueSource(ints = [2, 4, 6])
    fun isEven(n: Int) {
        assertTrue(n % 2 == 0)
    }
}

التعطيل ووضع الوسوم

تخطَّ اختبارًا مؤقتًا باستخدام @Disabled، واجمع الاختبارات باستخدام @Tag حتى تتمكن من تضمينها أو استبعادها في عمليات تشغيل CI.

import org.junit.jupiter.api.Disabled
import org.junit.jupiter.api.Tag
import org.junit.jupiter.api.Test

class FlakyTest {
    @Test
    @Disabled("fix later")
    @Tag("slow")
    fun pending() { }
}

مثال مستقل

إليك دالة بسيطة خالصة مكتوبة بـ Kotlin، والفكرة الكامنة وراء اختبارها (يُشغَّل الاختبار نفسه ضمن JUnit).

fun add(a: Int, b: Int): Int = a + b

fun main() {
    val result = add(2, 3)
    println(if (result == 5) "PASS" else "FAIL")
}

تحقق سريع

تحتاج إلى قائمة جديدة وفارغة قبل كل دالة اختبار على حدة. ما التعليق التوضيحي المناسب؟

مراجعة

يمكنك تنظيم اختبارات JUnit5 كما يلي:

  • يحدّد @Test الاختبارات، بينما يسمّيها @DisplayName
  • يتولى @BeforeEach و@BeforeAll الإعداد
  • يحافظ نمط الترتيب والتنفيذ والتحقق على وضوح الاختبارات
  • ينظّم @Nested و@ParameterizedTest الاختبارات ويدعمان توسيع نطاقها

التالي: عبارات التحقق.

الأسئلة الشائعة

هل درس «كتابة الاختبارات باستخدام JUnit5» مجاني؟

نعم — نص درس «كتابة الاختبارات باستخدام JUnit5» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Kotlin Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Kotlin Academy 4 دروس في المجموع.

ماذا ستتعلم في «كتابة الاختبارات باستخدام JUnit5»؟

نظّموا الاختبارات تتمرن على Kotlin Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Kotlin Academy؟

لا تُشترط خبرة سابقة. Kotlin Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «كتابة الاختبارات باستخدام JUnit5»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Kotlin Academy هذا؟

نعم. كل درس في Kotlin Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. كتابة الاختبارات باستخدام JUnit5
  2. التوكيدات
  3. المحاكاة باستخدام MockK
  4. اختبار Coroutines
← العودة إلى Kotlin Academy