اختبار Kotlin: Unit و Integration و E2E — دليل شامل

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

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

ابدأ الدورة

مقدمة عن الاختبار في كوتلن: من الوحدة إلى النهاية

لا يمكن تحقيق قاعدة أكواد عالية الجودة دون اختبار آلي. توفر كوتلن، كلغة حديثة للـ JVM، للمطورين مجموعة أدوات غنية لإنشاء اختبارات موثوقة. في هذه المقالة، سنقوم بتفصيل ثلاثة مستويات من هرم الاختبار كما تُطبق على كوتلن: الوحدة، التكامل، والنهاية إلى النهاية. ستتعلم كيفية كتابة اختبارات فعالة في كوتلن باستخدام أطر عمل شائعة مثل JUnit 5 وMockK وKtor Client وSelenium.



1. اختبار الوحدة في كوتلن: أساس الاستقرار

تتحقق اختبارات الوحدة من عمل الدوال أو الفئات أو الطرق الفردية بشكل منفصل عن التبعيات الخارجية. في كوتلن، يُستخدم JUnit 5 غالبًا لهذا الغرض، إلى جانب مكتبة المحاكاة MockK.



1.1. إعداد المشروع

أضف التبعيات إلى ملف build.gradle.kts:

dependencies {    testImplementation("org.junit.jupiter:junit-jupiter:5.10.0")    testImplementation("io.mockk:mockk:1.13.8")}


1.2. مثال على اختبار وحدة مع MockK

لنفترض أن لدينا UserService يعتمد على مستودع:

class UserService(private val repository: UserRepository) {    fun getUserName(id: Long): String {        val user = repository.findById(id)        return user?.name ?: "Unknown"    }}

اختبار باستخدام MockK:

import io.mockk.everyimport io.mockk.mockkimport org.junit.jupiter.api.Testimport kotlin.test.assertEquals

class UserServiceTest { @Test fun `return userName when user exists`() { val mockRepo = mockk<UserRepository>() every { mockRepo.findById(1L) } returns User(1L, "Alice") val service = UserService(mockRepo)

val result = service.getUserName(1L)

assertEquals("Alice", result) }}


1.3. أفضل الممارسات لاختبار الوحدة

  • اعزل التبعيات — استخدم المحاكاة (mocks) لجميع الاستدعاءات الخارجية (قاعدة البيانات، API).
  • اختبر الحالات الحدية: القيم الفارغة (null)، السلاسل الفارغة، الأرقام السالبة.
  • استخدم أسماء اختبار واضحة — يجب أن تصف السيناريو والنتيجة المتوقعة.
  • اتبع مبدأ AAA: الترتيب (Arrange)، التنفيذ (Act)، التأكيد (Assert).


2. اختبار التكامل في كوتلن: التحقق من التفاعل

تتحقق اختبارات التكامل من كيفية عمل عدة مكونات من النظام معًا. في كوتلن، يمكن أن يكون هذا اختبارًا لـ REST API باستخدام Ktor Client أو التحقق من عمليات قاعدة البيانات عبر Exposed.



2.1. اختبار REST API مع Ktor

قم بإنشاء خادم Ktor بسيط واختبره:

// Serverfun Application.module() {    routing {        get("/hello") {            call.respondText("Hello, Kotlin!")        }    }}

// Testclass ApiTest { @Test fun `test hello endpoint`() = testApplication { application { module() } val response = client.get("/hello") assertEquals(HttpStatusCode.OK, response.status) assertEquals("Hello, Kotlin!", response.bodyAsText()) }}


2.2. العمل مع قاعدة بيانات اختبارية

لإجراء اختبارات التكامل مع قاعدة بيانات، استخدم H2 (في الذاكرة) أو Testcontainers لـ PostgreSQL:

@Testfun `test user creation`() {    withTestDatabase {        val user = User.new {            name = "Bob"            email = "bob@test.com"        }        assertEquals("Bob", user.name)        assertNotNull(user.id)    }}

private fun withTestDatabase(block: () -> Unit) { Database.connect("jdbc:h2:mem:

المدونات

توصيات الكتب