اختبار التكامل لـ Kotlin مع Docker: المستوى المتقدم

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

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

ابدأ الدورة

اختبار التكامل لـ Kotlin مع Docker: المستوى المتقدم

\n\n

اختبار التكامل هو مرحلة حاسمة في تطوير الخدمات المصغرة الحديثة باستخدام Kotlin. استخدام Docker يسمح بإنشاء بيئات معزولة وقابلة للتكرار، أقرب ما يكون إلى بيئة الإنتاج. في هذه المقالة، سنستعرض تقنيات متقدمة لاختبار التكامل لتطبيقات Kotlin مع Docker، بما في ذلك Testcontainers، تحسين الأداء، والتكامل مع CI/CD.

\n\n

1. إعداد Testcontainers لمشروع Kotlin

\n\n

Testcontainers هي مكتبة لـ JUnit تدير دورة حياة حاويات Docker مباشرة من الاختبارات. بالنسبة لـ Kotlin، توفر امتدادات DSL مريحة.

\n\n

1.1. إضافة التبعيات

\n\n

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

\n\n
testImplementation("org.testcontainers:testcontainers:1.19.3")\ntestImplementation("org.testcontainers:postgresql:1.19.3")\ntestImplementation("org.testcontainers:junit-jupiter:1.19.3")\ntestImplementation("org.jetbrains.kotlin:kotlin-test")
\n\n

1.2. مثال أساسي مع PostgreSQL

\n\n

لننظر إلى اختبار لمستودع يعمل مع PostgreSQL:

\n\n
import org.junit.jupiter.api.Test\nimport org.testcontainers.containers.PostgreSQLContainer\nimport org.testcontainers.junit.jupiter.Container\nimport org.testcontainers.junit.jupiter.Testcontainers\n\n@Testcontainers\nclass UserRepositoryTest {\n\n    companion object {\n        @Container\n        val postgres = PostgreSQLContainer<Nothing>("postgres:15-alpine").apply {\n            withDatabaseName("testdb")\n            withUsername("test")\n            withPassword("test")\n        }\n    }\n\n    @Test\n    fun `should save and retrieve user`() {\n        val dataSource = createDataSource(postgres.jdbcUrl, postgres.username, postgres.password)\n        val repository = UserRepository(dataSource)\n\n        val user = User(id = null, name = "Alice", email = "alice@example.com")\n        val saved = repository.save(user)\n\n        val found = repository.findById(saved.id!!)\n        assert(found?.name == "Alice")\n    }\n\n    private fun createDataSource(jdbcUrl: String, username: String, password: String): DataSource {\n        // HikariCP أو أي تجمع اتصالات آخر\n        return HikariDataSource(HikariConfig().apply {\n            this.jdbcUrl = jdbcUrl\n            this.username = username\n            this.password = password\n            driverClassName = "org.postgresql.Driver"\n        })\n    }\n}
\n\n

يقوم Testcontainers تلقائيًا بتشغيل الحاوية قبل الاختبارات وإيقافها بعد الانتهاء. هذا يضمن نقاء بيئة الاختبار.

\n\n

2. اختبار خدمات متعددة باستخدام Docker Compose

\n\n

في الخدمات المصغرة الحقيقية، غالبًا ما يكون التفاعل مع أنظمة خارجية متعددة مطلوبًا: قواعد البيانات، قوائم انتظار الرسائل، وذاكرة التخزين المؤقت. استخدم DockerComposeContainer لرفع مجموعة كاملة.

\n\n

2.1. تكوين Docker Compose

\n\n

أنشئ ملف docker-compose-test.yml:

\n\n
version: '3.8'\nservices:\n  postgres:\n    image: postgres:15-alpine\n    environment:\n      POSTGRES_DB: testdb\n      POSTGRES_USER: test\n      POSTGRES_PASSWORD: test\n  redis:\n    image: redis:7-alpine\n  rabbitmq:\n    image: rabbitmq:3-management-alpine
\n\n

2.2. اختبار التكامل مع Docker Compose

\n\n

مثال لاختبار يتحقق من تفاعل الخدمة مع قاعدة البيانات، ذاكرة التخزين المؤقت، وقائمة الانتظار:

\n\n
import org.junit.jupiter.api.Test\nimport org.testcontainers.containers.DockerComposeContainer\nimport org.testcontainers.junit.jupiter.Container\nimport org.testcontainers.junit.jupiter.Testcontainers\nimport java.io.File\n\n@Testcontainers\nclass OrderServiceIntegrationTest {\n\n    companion object {\n        @Container\n        val environment = DockerComposeContainer(\n            File("src/test/resources/docker-com                

المدونات

توصيات الكتب