المحاكاة باستخدام MockK
حاكوا التبعيات
المحاكاة باستخدام MockK درس مجاني في Kotlin Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Kotlin Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
ما هو MockK؟
MockK هي مكتبة لمحاكاة الكائنات مصممة لـ Kotlin. تنشئ إصدارات وهمية من الاعتماديات، حتى تتمكن من اختبار فئة بمعزل عن غيرها.
- دعم أصلي لـ Kotlin (الكائنات، والامتدادات، وcoroutines)
- لغة DSL سهلة القراءة لتحديد السلوك والتحقق منه
إضافة MockK
أضف MockK باعتبارها اعتمادية للاختبار.
dependencies {
testImplementation("io.mockk:mockk:1.13.11")
}إنشاء كائن وهمي
استخدم mockk<Type>() لإنشاء كائن وهمي. لا تكون أساليبه محددة السلوك افتراضيًا، وستفشل إذا تم استدعاؤها.
import io.mockk.mockk
interface Repo { fun find(id: Int): String }
val repo = mockk<Repo>()تحديد السلوك باستخدام every
حدّد السلوك باستخدام every { } returns .... فهذا يخبر الكائن الوهمي بما يجب إرجاعه عند استدعاء معين.
import io.mockk.every
import io.mockk.mockk
interface Repo { fun find(id: Int): String }
val repo = mockk<Repo>()
// every { repo.find(1) } returns "Ada"التحقق من الاستدعاءات
استخدم verify { } للتحقق من استدعاء أسلوب ما. ويمكنك تحديد عدد الاستدعاءات بدقة.
import io.mockk.verify
// verify { repo.find(1) }
// verify(exactly = 2) { repo.find(any()) }
// verify(exactly = 0) { repo.find(99) }مطابقات الوسائط
تجعل المطابقات مثل any() وeq() وmatch { } عمليات تحديد السلوك والتحقق منه أكثر مرونة.
import io.mockk.every
import io.mockk.mockk
interface Repo { fun find(id: Int): String }
val repo = mockk<Repo>()
// every { repo.find(any()) } returns "X"
// every { repo.find(match { it > 10 }) } returns "big"الكائنات الوهمية المرنة
يعيد الكائن الوهمي relaxed قيمًا افتراضية مناسبة (مثل 0 والسلسلة النصية الفارغة وغيرها) للاستدعاءات التي لم يُحدَّد سلوكها، لذلك لا يتعين عليك تحديد سلوك كل شيء.
import io.mockk.mockk
interface Logger { fun log(msg: String) }
val logger = mockk<Logger>(relaxed = true)التقاط الوسائط
استخدم slot مع capture() لفحص الوسيط الدقيق الذي مُرّر إلى أسلوب وهمي.
import io.mockk.slot
import io.mockk.verify
val msgSlot = slot<String>()
// verify { logger.log(capture(msgSlot)) }
// println(msgSlot.captured)الكائنات التجسسية
يغلّف spyk كائنًا حقيقيًا: فتعمل الأساليب الحقيقية ما لم تحدد سلوكها. وهذا مفيد للمحاكاة الجزئية.
import io.mockk.spyk
class Calc { fun square(n: Int) = n * n }
val calc = spyk(Calc())
// real square runs; you can still verify { calc.square(3) }إلقاء استثناء من كائن وهمي
حدّد سلوك أسلوب بحيث يرمي استثناءً، حتى تتمكن من اختبار مسارات معالجة الأخطاء.
import io.mockk.every
import io.mockk.mockk
interface Repo { fun find(id: Int): String }
val repo = mockk<Repo>()
// every { repo.find(0) } throws NoSuchElementException()التنظيف
استدعِ clearAllMocks() داخل @AfterEach، أو استخدم MockKExtension في JUnit5، لإعادة ضبط حالة الكائنات الوهمية بين الاختبارات وتجنب تسرّب الحالة.
import io.mockk.clearAllMocks
import org.junit.jupiter.api.AfterEach
class ServiceTest {
@AfterEach
fun tearDown() { clearAllMocks() }
}تحقق سريع
لديك كائن وهمي يضم أساليب كثيرة، لكنك تهتم بواحد منها فقط. وتريد أن تعيد الأساليب التي لم تحدد سلوكها قيمًا افتراضية غير ضارة. ماذا تنشئ؟
مراجعة
تتيح لك MockK عزل الرمز قيد الاختبار:
- ينشئ
mockk()كائنات وهمية، ويحددevery { } returnsسلوكها - يتحقق
verify { }من التفاعلات - المطابقات، والتقاط الوسائط باستخدام
slot، وspyk، والكائنات الوهمية المرنة clearAllMocks()بين الاختبارات
التالي: اختبار coroutines.
تعلم Kotlin مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 51
- الدروس
- 203
الأسئلة الشائعة
هل درس «المحاكاة باستخدام MockK» مجاني؟
نعم — نص درس «المحاكاة باستخدام MockK» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Kotlin Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
ماذا ستتعلم في «المحاكاة باستخدام MockK»؟
حاكوا التبعيات تتمرن على Kotlin Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Kotlin Academy؟
لا تُشترط خبرة سابقة. Kotlin Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «المحاكاة باستخدام MockK»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Kotlin Academy هذا؟
نعم. كل درس في Kotlin Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- كتابة الاختبارات باستخدام JUnit5
- التوكيدات
- المحاكاة باستخدام MockK
- اختبار Coroutines