Testcontainers Integration
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 = 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
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.