Kotlin के साथ Docker एकीकरण परीक्षण: A से Z तक
\n\nKotlin में आधुनिक विकास में, Docker का उपयोग करके एकीकरण परीक्षण एक वास्तविक मानक बन गया है। कंटेनरीकरण पृथक, पुनरुत्पादनीय परीक्षण वातावरण बनाने की अनुमति देता है जो production-वातावरण के जितना संभव हो उतना करीब होते हैं। इस लेख में, हम Docker और Testcontainers लाइब्रेरी की मदद से Kotlin अनुप्रयोगों के लिए एकीकरण परीक्षण स्थापित करने और लिखने की पूरी प्रक्रिया का विश्लेषण करेंगे।
\n\nKotlin एकीकरण परीक्षण के लिए Docker क्यों महत्वपूर्ण है?
\n\nपारंपरिक एकीकरण परीक्षण अक्सर वातावरण संबंधी समस्याओं से ग्रस्त होते हैं: डेटाबेस के विभिन्न संस्करण, ड्राइवर असंगतता, पृष्ठभूमि प्रक्रियाओं के कारण "फ्लोटिंग" परीक्षण। Docker इन समस्याओं को हल करता है, प्रदान करता है:
\n\n- \n
- पृथक्करण: प्रत्येक परीक्षण एक साफ कंटेनर में चलता है \n
- पुनरुत्पादनीयता: किसी भी मशीन पर समान वातावरण \n
- स्केलेबिलिटी: जटिल माइक्रोसर्विस आर्किटेक्चर का परीक्षण करने की क्षमता \n
- गति: कंटेनरों का तेज़ प्रारंभ और रोक \n
Docker के साथ एकीकरण परीक्षणों के लिए Kotlin प्रोजेक्ट सेटअप
\n\nशुरू करने के लिए, build.gradle.kts में आवश्यक निर्भरताएँ जोड़ें:
dependencies {\n // Testcontainers\n testImplementation("org.testcontainers:testcontainers:1.19.3")\n testImplementation("org.testcontainers:postgresql:1.19.3")\n testImplementation("org.testcontainers:kafka:1.19.3")\n testImplementation("org.testcontainers:junit-jupiter:1.19.3")\n \n // डेटाबेस\n testImplementation("org.postgresql:postgresql:42.7.1")\n \n // JUnit 5\n testImplementation("org.junit.jupiter:junit-jupiter:5.10.1")\n \n // Spring Boot अनुप्रयोगों के लिए\n testImplementation("org.springframework.boot:spring-boot-starter-test:3.2.1")\n testImplementation("org.springframework.boot:spring-boot-testcontainers:3.2.1")\n}\n\nमूल उदाहरण: PostgreSQL के साथ परीक्षण
\n\nसबसे सरल उदाहरण पर विचार करें - PostgreSQL के साथ काम करने वाले रिपॉजिटरी का परीक्षण। Testcontainers का उपयोग करके एक एकीकरण परीक्षण बनाएं:
\n\nimport org.junit.jupiter.api.Test\nimport org.testcontainers.containers.PostgreSQLContainer\nimport org.testcontainers.junit.jupiter.Container\nimport org.testcontainers.junit.jupiter.Testcontainers\nimport javax.sql.DataSource\n\n@Testcontainers\nclass UserRepositoryIntegrationTest {\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 find user`() {\n val dataSource = createDataSource(postgres)\n val repository = UserRepository(dataSource)\n \n val user = User(id = null, name = "इवान पेत्रोव", email = "ivan@example.com")\n val savedUser = repository.save(user)\n \n val foundUser = repository.findById(savedUser.id!!)\n assert(foundUser != null)\n assert(foundUser?.name == "इवान पेत्रोव")\n }\n\n private fun createDataSource(container: PostgreSQLContainer<*>): DataSource {\n val config = HikariConfig().apply {\n jdbcUrl = container.jdbcUrl\n username = container.username\n password = container.password\n driverClassName = container.driverClassName\n }\n return HikariDataSource(config)\n }\n}\n\nKafka और Docker Compose के साथ माइक्रोसर्विसेज का परीक्षण
\n\nअधिक जटिल परिदृश्यों के लिए, जहाँ कई सेवाओं की आवश्यकता होती है, Testcontainers के माध्यम से Docker Compose का उपयोग करें:
\n\nimport org.testcontainers.containers.DockerComposeContainer\nimport org.testcontainers.containers.wait.strategy.Wait\nimport java.io.File\n\nclass OrderService