🐳
Testing

Testcontainers Integration

@ServiceConnection (Boot 3.1+)
💡 Testcontainers ek POP-UP RESTAURANT hai — REAL KITCHEN SETUP (real database) CHAHIYE HOTI hai TESTING ke liye, LEKIN PERMANENT KITCHEN (production database) TOUCH karna DANGEROUS hai. Testcontainers EK TEMPORARY, EXACTLY-REAL KITCHEN (Docker container) SPIN UP karta hai, TESTS ke liye, aur BAAD mein TEAR DOWN kar deta hai.

Testcontainers library REAL DATABASES (PostgreSQL, MySQL, MongoDB) ko DOCKER CONTAINERS mein SPIN UP karta hai, SIRF TESTING duration ke liye — H2 IN-MEMORY database se ZYAADA RELIABLE hai, kyunki H2 ka SQL DIALECT, PRODUCTION database (PostgreSQL) se DIFFERENT ho sakta hai.

Spring Boot 3.1+ mein, @ServiceConnection ANNOTATION is INTEGRATION ko BAHUT SIMPLE bana deta hai — PEHLE, @DynamicPropertySource se MANUALLY connection details (URL, username, password) SET karni padti thi. @ServiceConnection se, Spring Boot AUTOMATICALLY container ki DETAILS DETECT karके, DataSource CONFIGURE kar deta hai.

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@Testcontainers
class OrderIntegrationTest {
    @Container
    @ServiceConnection   // Spring Boot 3.1+ — AUTOMATIC configuration!
    static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:15");

    @Autowired
    private TestRestTemplate restTemplate;

    @Test
    void shouldCreateOrderInRealDatabase() {
        ResponseEntity<Order> response = restTemplate.postForEntity(
            "/api/orders", new OrderDto(...), Order.class);
        assertEquals(HttpStatus.CREATED, response.getStatusCode());
    }
}
🐳
Testcontainers ek POP-UP RESTAURANT hai — REAL KITCHEN SETUP (real database) CHAHIYE HOTI hai TESTING ke liye, LEKIN PERMANENT KITCHEN (production database) TOUCH karna DANGEROUS hai. Testcontainers EK TEMPORARY, EXACTLY-REAL KITCHEN (Docker container) SPIN UP karta hai, TESTS ke liye, aur BAAD mein TEAR DOWN kar deta hai.
1 / 6
⚡ झट से Recap
  • Testcontainers = REAL database, Docker container mein, sirf TESTING ke liye
  • @ServiceConnection (Boot 3.1+) = AUTOMATIC configuration, MANUAL properties NAHI chahiye
  • H2 se ZYAADA RELIABLE — SAME database engine jo PRODUCTION mein hai
इस page में (2 subtopics)

Spring Boot 3.1+ mein, @ServiceConnection annotation Testcontainers INTEGRATION ko BAHUT SIMPLE bana deta hai — @DynamicPropertySource se MANUALLY properties SET karne ki zaroorat NAHI, Spring Boot AUTOMATICALLY container ki connection details DETECT karके, DataSource CONFIGURE kar deta hai.

@SpringBootTest
@Testcontainers
class OrderIntegrationTest {
    @Container
    @ServiceConnection
    static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:15");
    // Koi @DynamicPropertySource NAHI chahiye — AUTOMATIC!
}

Default mein, Testcontainers HAR TEST CLASS ke liye NAYA container START karta hai (SLOW). withReuse(true) OPTION se, SAME container MULTIPLE test classes ke BEECH SHARE ho sakta hai, TEST SUITE ki SPEED SIGNIFICANTLY IMPROVE hoती hai.

💡Tip: Container REUSE ENABLE karne ke liye, ~/.testcontainers.properties file mein testcontainers.reuse.enable=true bhi SET karna padta hai — YE GLOBAL, OPT-IN SETTING hai.