اختبار في Kotlin: أطر وأدوات لتحقيق كود عالي الجودة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

اختبار في Kotlin: أطر وأدوات لتحقيق كود عالي الجودة



Kotlin — لغة برمجة حديثة تعمل فوق JVM. بفضل التوافق مع Java، يمكن استخدام أطر Java الكلاسيكية (JUnit، Mockito) لاختبار كود Kotlin، بالإضافة إلى الأدوات الحديثة المصممة خصيصًا لـ Kotlin. في هذه المقالة، سنستعرض الأطر الرئيسية وميزاتها مع أمثلة عملية.



1. JUnit 5 — أساس الاختبار



JUnit 5 — إطار قياسي للاختبارات الوحدوية على JVM. يعمل بشكل ممتاز مع Kotlin بفضل دعمه للامبدا، دوال الامتداد، وفئات البيانات.



import org.junit.jupiter.api.Testimport org.junit.jupiter.api.Assertions.*

class CalculatorTest { @Test fun `addition should return correct sum`() { val result = Calculator().add(2, 3) assertEquals(5, result) }}


ميزات JUnit 5 في Kotlin:

  • يمكن كتابة أسماء الاختبارات بين علامتي تنصيص مع مسافات — لتحسين readability
  • دعم الاختبارات المعلمية عبر @ParameterizedTest
  • دوال تأكيد مدمجة (assertAll، assertThrows)
  • سهولة الدمج مع MockK و Mockito


2. Kotest — إطار من الجيل الجديد



Kotest (المعروف سابقًا باسم KotlinTest) — إطار قوي مكتوب بلغة Kotlin من الصفر. يقدم العديد من أنماط وصف الاختبارات (StringSpec، BehaviorSpec، FunSpec وغيرها).



import io.kotest.core.spec.style.StringSpecimport io.kotest.matchers.shouldBe

class StringSpecExample : StringSpec({ "length should return correct size" { "hello".length shouldBe 5 } "startsWith should work" { "world".startsWith("wo") shouldBe true }})


مزايا Kotest:

  • أكثر من 200 أداة مطابقة مدمجة (shouldBe، shouldContain، shouldBeGreaterThan)
  • دعم الاختبار القائم على الخصائص (توليد بيانات عشوائية)
  • موفري بيانات مدمجين للاختبارات الجدولية
  • تكامل كامل مع Gradle و Maven


3. MockK — كائنات وهمية لـ Kotlin



MockK — مكتبة لإنشاء كائنات وهمية، مصممة خصيصًا لـ Kotlin. تراعي أمان القيم الخالية، coroutines، ودوال الامتداد.



import io.mockk.everyimport io.mockk.mockkimport io.mockk.verifyimport org.junit.jupiter.api.Test

class UserServiceTest { @Test fun `should call repository`() { val repo = mockk<UserRepository>() every { repo.findUser(1) } returns User("Alice")

val service = UserService(repo) service.getUserName(1)

verify { repo.findUser(1) } }}


الإمكانيات الرئيسية لـ MockK:

  • دعم spy (التهكم الجزئي)
  • العمل مع دوال التعليق و coroutines (coEvery، coVerify)
  • أدوات مطابقة مريحة للوسائط (any()، capture())
  • إعادة تعيين الكائنات الوهمية تلقائيًا بعد الاختبار


4. Spek — نمط اختبار BDD



Spek — إطار لتطوير السلوك (BDD). يسمح بوصف الاختبارات بصيغة «Given-When-Then».



import org.spekframework.spek2.Spekimport org.spekframework.spek2.style.specification.describe

class CalculatorSpek : Spek({ describe("Calculator") { val calc by memoized { Calculator() }

context("addition") { it("returns sum of two numbers") { val result = calc.add(2, 3) assertEquals(5, result) } } }})


ميزات Spek:

  • هيكل اختبار قابل للقراءة لمواصفات الأعمال
  • دعم السياقات المتداخلة والإعدادات العامة
  • التكامل مع

توصيات