Kotlin के साथ Docker का एकीकरण परीक्षण: उन्नत स्तर
\n\nएकीकरण परीक्षण Kotlin पर आधुनिक माइक्रोसर्विसेज के विकास में एक महत्वपूर्ण चरण है। Docker का उपयोग पृथक, पुनरुत्पादनीय वातावरण बनाने की अनुमति देता है जो production के जितना संभव हो उतना करीब होते हैं। इस लेख में, हम Docker के साथ Kotlin अनुप्रयोगों के एकीकरण परीक्षण की उन्नत तकनीकों पर चर्चा करेंगे, जिसमें Testcontainers, प्रदर्शन अनुकूलन और CI/CD एकीकरण शामिल हैं।
\n\n1. Kotlin प्रोजेक्ट के लिए Testcontainers सेटअप
\n\nTestcontainers JUnit के लिए एक लाइब्रेरी है जो सीधे परीक्षणों से Docker कंटेनरों के जीवनचक्र का प्रबंधन करती है। Kotlin के लिए, यह सुविधाजनक DSL एक्सटेंशन प्रदान करती है।
\n\n1.1. निर्भरताएँ जोड़ना
\n\nbuild.gradle.kts में निम्नलिखित निर्भरताएँ जोड़ें:
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\n1.2. PostgreSQL के साथ मूल उदाहरण
\n\nPostgreSQL के साथ काम करने वाले रिपॉजिटरी के लिए एक परीक्षण पर विचार करें:
\n\nimport 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\nTestcontainers स्वचालित रूप से परीक्षणों से पहले कंटेनर शुरू करता है और पूरा होने के बाद रोक देता है। यह परीक्षण वातावरण की शुद्धता सुनिश्चित करता है।
\n\n2. Docker Compose के साथ कई सेवाओं का परीक्षण
\n\nवास्तविक माइक्रोसर्विसेज में, अक्सर कई बाहरी प्रणालियों के साथ बातचीत की आवश्यकता होती है: डेटाबेस, संदेश कतारें, कैश। पूर्ण स्टैक को ऊपर उठाने के लिए DockerComposeContainer का उपयोग करें।
2.1. Docker Compose कॉन्फ़िगरेशन
\n\nएक docker-compose-test.yml फ़ाइल बनाएँ:
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\n2.2. Docker Compose के साथ एकीकरण परीक्षण
\n\nएक परीक्षण का उदाहरण जो डेटाबेस, कैश और कतार के साथ सेवा की बातचीत की जाँच करता है:
\n\nimport 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