Java Academy · पाठ

Testcontainers: वास्तविक डेटाबेस एकीकरण परीक्षण

Testcontainers से Docker में PostgreSQL शुरू कीजिए और वास्तविक डेटाबेस के विरुद्ध एकीकरण परीक्षण चलाइए

पाठ 4, कुल 4 में से13 चरण

Testcontainers: वास्तविक डेटाबेस एकीकरण परीक्षण, CoddyKit पर Java Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Java Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

Testcontainers क्यों

H2 इन-मेमोरी डेटाबेस PostgreSQL की विशिष्ट सुविधाओं, जैसे JSON, पूर्ण-पाठ खोज और ON CONFLICT, का समर्थन नहीं करते। Testcontainers परीक्षणों के दौरान वास्तविक Docker कंटेनर शुरू करता है, जिससे प्रोडक्शन के समान डेटाबेस मिलता है।

Testcontainers निर्भरता जोड़ना

अपनी बिल्ड फ़ाइल में Testcontainers BOM और PostgreSQL मॉड्यूल जोड़ें। Spring Boot 3.1+ में Testcontainers का प्रबंधित संस्करण शामिल होता है।

// build.gradle:
testImplementation "org.testcontainers:junit-jupiter"
testImplementation "org.testcontainers:postgresql"
// Optionally use Spring Boot Testcontainers support:
testImplementation "org.springframework.boot:spring-boot-testcontainers"

@Testcontainers और @Container

परीक्षण क्लास को @Testcontainers से एनोटेट करें और कंटेनर को स्थिर @Container फ़ील्ड के रूप में घोषित करें। JUnit 5 इसे अपने-आप शुरू और बंद करता है।

@Testcontainers
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
class UserRepositoryIntegrationTest {
    @Container
    static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:16-alpine")
        .withDatabaseName("testdb")
        .withUsername("test")
        .withPassword("test");
}

कंटेनर से DataSource कॉन्फ़िगर करना

कंटेनर के डायनेमिक पोर्ट और क्रेडेंशियल को Spring के DataSource कॉन्फ़िगरेशन में डालने के लिए @DynamicPropertySource का उपयोग करें।

@DynamicPropertySource
static void configureProperties(DynamicPropertyRegistry registry) {
    registry.add("spring.datasource.url",      postgres::getJdbcUrl);
    registry.add("spring.datasource.username", postgres::getUsername);
    registry.add("spring.datasource.password", postgres::getPassword);
}

Spring Boot 3.1 ServiceConnection

Spring Boot 3.1+ @ServiceConnection से एनोटेट किए गए Testcontainers @Container बीन से DataSource को स्वतः कॉन्फ़िगर करता है — @DynamicPropertySource की आवश्यकता नहीं होती।

@Bean
@ServiceConnection
static PostgreSQLContainer<?> postgresContainer() {
    return new PostgreSQLContainer<>("postgres:16-alpine");
}

सिंगलटन कंटेनर पैटर्न

प्रत्येक परीक्षण वर्ग के लिए कंटेनर शुरू करना धीमा होता है। Startables.deepStart() वाले स्थिर फ़ील्ड या अमूर्त आधार वर्ग का उपयोग करके एक कंटेनर को सभी परीक्षणों में साझा करें।

abstract class AbstractIntegrationTest {
    @Container
    static final PostgreSQLContainer<?> POSTGRES =
        new PostgreSQLContainer<>("postgres:16-alpine").withReuse(true);
    static { POSTGRES.start(); }
    @DynamicPropertySource
    static void props(DynamicPropertyRegistry r) {
        r.add("spring.datasource.url",      POSTGRES::getJdbcUrl);
        r.add("spring.datasource.username", POSTGRES::getUsername);
        r.add("spring.datasource.password", POSTGRES::getPassword);
    }
}

PostgreSQL-विशिष्ट सुविधाओं का परीक्षण

Testcontainers के साथ आप JSON कॉलम, JSONB ऑपरेटर, पूर्ण-पाठ खोज और ON CONFLICT DO UPDATE का परीक्षण कर सकते हैं — H2 के साथ यह संभव नहीं है।

@Test
void jsonb_search_works() {
    // Insert row with JSONB column, then query
    List<Event> logins = repo.findByType("login");
    assertEquals(1, logins.size());
}

एकाधिक कंटेनर: Compose

एकाधिक सेवाओं की आवश्यकता वाले एकीकरण परीक्षणों के लिए पूरा स्टैक (PostgreSQL + Redis + Kafka) चलाने हेतु DockerComposeContainer का उपयोग करें।

@Container
static DockerComposeContainer<?> compose = new DockerComposeContainer<>(
    new File("src/test/resources/docker-compose.yml"))
    .withExposedService("postgres", 5432)
    .withExposedService("redis", 6379);

Ryuk: स्वचालित सफ़ाई

JVM के बाहर निकलने पर Testcontainers कंटेनरों को स्वचालित रूप से रोकने और हटाने के लिए Ryuk कंटेनर का उपयोग करता है — परीक्षण विफल होने पर भी, जिससे कंटेनर बिना सफ़ाई के बचे नहीं रहते।

Testcontainers के साथ @SpringBootTest

वास्तविक PostgreSQL कंटेनर के विरुद्ध पूरे अनुप्रयोग स्टैक (नियंत्रकों, सेवाओं और रिपॉज़िटरी) का परीक्षण करने के लिए @DataJpaTest के बजाय @SpringBootTest का उपयोग करें।

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@Testcontainers
class FullIntegrationTest extends AbstractIntegrationTest {
    @LocalServerPort int port;
    @Autowired TestRestTemplate rest;
    @Test
    void end_to_end_user_creation() {
        ResponseEntity<UserDto> r = rest.postForEntity("/api/users", createReq(), UserDto.class);
        assertEquals(HttpStatus.CREATED, r.getStatusCode());
    }
}

कंटेनर इमेज कैशिंग

Testcontainers डाउनलोड की गई Docker इमेज को स्थानीय रूप से कैश करता है। परीक्षण शुरू होने से पहले CI में इमेज डाउनलोड करें (docker pull postgres:16-alpine), ताकि परीक्षण चलने के दौरान डाउनलोड का अतिरिक्त समय न लगे।

त्वरित जाँच

Spring Boot 3.1+ में कौन-सा annotation Testcontainers कंटेनर को Spring के DataSource से स्वतः जोड़ता है?

पुनरावलोकन

Testcontainers एकीकरण परीक्षणों के लिए वास्तविक Docker कंटेनर चलाता है। @Container + @DynamicPropertySource या @ServiceConnection (Boot 3.1+) का उपयोग करें। सिंगलटन पैटर्न से कंटेनरों को परीक्षणों में साझा करें। H2 के साथ असंभव PostgreSQL-विशिष्ट सुविधाओं का परीक्षण करें।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Java सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
104
पाठ
374

अक्सर पूछे जाने वाले प्रश्न

क्या “Testcontainers: वास्तविक डेटाबेस एकीकरण परीक्षण” पाठ निःशुल्क है?

हाँ—“Testcontainers: वास्तविक डेटाबेस एकीकरण परीक्षण” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Java Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“Testcontainers: वास्तविक डेटाबेस एकीकरण परीक्षण” में मैं क्या सीखूँगा?

Testcontainers से Docker में PostgreSQL शुरू कीजिए और वास्तविक डेटाबेस के विरुद्ध एकीकरण परीक्षण चलाइए आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Java Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Java Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Java Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“Testcontainers: वास्तविक डेटाबेस एकीकरण परीक्षण” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Java Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Java Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. @CsvSource और @MethodSource से पैरामीटरयुक्त परीक्षण
  2. Mockito उन्नत: आर्ग्युमेंट कैप्चरर और स्पाई
  3. Spring Boot परीक्षण स्लाइस: @WebMvcTest और @DataJpaTest
  4. Testcontainers: वास्तविक डेटाबेस एकीकरण परीक्षण
← Java Academy पर वापस जाएँ