जावा के साथ Docker एकीकरण परीक्षण: A से Z तक
\n\nएकीकरण परीक्षण विकास का एक महत्वपूर्ण चरण है, जो एप्लिकेशन घटकों के बाहरी सिस्टम: डेटाबेस, संदेश कतार, REST सेवाओं के साथ इंटरैक्शन की जांच करने की अनुमति देता है। H2 या एम्बेडेड सर्वर का उपयोग करने वाला पारंपरिक दृष्टिकोण अक्सर परीक्षण और उत्पादन वातावरण के बीच अंतर पैदा करता है। समाधान है Docker। इस लेख में, हम Testcontainers लाइब्रेरी और Docker Compose का उपयोग करके Docker के साथ जावा अनुप्रयोगों के एकीकरण परीक्षण को कैसे सेट अप करें, यह समझेंगे। आप सीखेंगे कि वास्तविक कंटेनरों के साथ काम करने वाले परीक्षण कैसे लिखें और उन्हें CI/CD में कैसे एकीकृत करें।
\n\nएकीकरण परीक्षणों के लिए Docker क्यों?
\nDocker आपको परीक्षणों से ठीक पहले निर्भरताओं (PostgreSQL, Redis, Kafka) के सटीक संस्करणों के साथ अलग-अलग कंटेनर बनाने और उनके बाद उन्हें नष्ट करने की अनुमति देता है। यह सुनिश्चित करता है:
\n- \n
- उत्पादन के साथ समानता — आप एमुलेशन के बजाय वास्तविक डेटाबेस के साथ परीक्षण करते हैं। \n
- अलगाव — प्रत्येक परीक्षण रन एक साफ स्थिति से शुरू होता है। \n
- समानांतर निष्पादन — कई परीक्षण वर्ग विभिन्न कंटेनरों का उपयोग कर सकते हैं। \n
- पुनरुत्पादन क्षमता — परीक्षण स्थानीय मशीन और CI में समान रूप से काम करते हैं। \n
Testcontainers के साथ प्रोजेक्ट सेटअप
\nTestcontainers एक जावा लाइब्रेरी है जो Docker कंटेनरों के जीवनचक्र का प्रबंधन करती है। pom.xml (Maven) में निर्भरता जोड़ें:
<dependency>\n <groupId>org.testcontainers</groupId>\n <artifactId>testcontainers</artifactId>\n <version>1.19.3</version>\n <scope>test</scope>\n</dependency>\n<dependency>\n <groupId>org.testcontainers</groupId>\n <artifactId>postgresql</artifactId>\n <version>1.19.3</version>\n <scope>test</scope>\n</dependency>\n<dependency>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-starter-test</artifactId>\n <scope>test</scope>\n</dependency>\n\nGradle के लिए, build.gradle में जोड़ें:
testImplementation 'org.testcontainers:testcontainers:1.19.3'\ntestImplementation 'org.testcontainers:postgresql:1.19.3'\n\nउदाहरण: PostgreSQL के साथ रिपॉजिटरी का परीक्षण
\nउपयोगकर्ताओं के साथ काम करने के लिए एक सरल सेवा पर विचार करें। एक परीक्षण बनाएं जो PostgreSQL कंटेनर चलाता है और डेटा सेविंग की जांच करता है।
\n\nimport org.junit.jupiter.api.Test;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.boot.test.context.SpringBootTest;\nimport org.springframework.test.context.DynamicPropertyRegistry;\nimport org.springframework.test.context.DynamicPropertySource;\nimport org.testcontainers.containers.PostgreSQLContainer;\nimport org.testcontainers.junit.jupiter.Container;\nimport org.testcontainers.junit.jupiter.Testcontainers;\n\nimport static org.assertj.core.api.Assertions.assertThat;\n\n@Testcontainers\n@SpringBootTest\nclass UserRepositoryTest {\n\n @Container\n static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:15")\n .withDatabaseName("testdb")\n .withUsername("test")\n .withPassword("test");\n\n @DynamicPropertySource\n static void configureProperties(DynamicPropertyRegistry registry) {\n registry.add("spring.datasource.url", postgres::getJdbcUrl);\n registry.add("spring.datasource.username", postgres::getUsername);\n registry.add("spring.datasource.password", postgres::getPassword);\n }\n\n @Autowired\n private UserRepository userRepository;\n\n @Test\n void shouldSaveAndFindUser() {\n User user = new User("john_doe", "john@example