test: share one Postgres container across test classes

The per-class container was stopped under the Spring context that the next
test class reused, so a second integration test class failed with
"Connection is not available".
This commit is contained in:
lobo committed 2026-09-24 11:22:29 +02:00
1 parent 9ff00c1f8f
commit 82973fad55
2 files changed
+12 -8

No files matched your search

@@ -5,8 +5,6 @@ import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.testcontainers.service.connection.ServiceConnection;
import org.springframework.test.context.ActiveProfiles;
import org.testcontainers.containers.PostgreSQLContainer;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;
/**
* Base class for integration tests.
@@ -15,10 +13,14 @@ import org.testcontainers.junit.jupiter.Testcontainers;
@Tag("IntegrationTest")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ActiveProfiles("dev")
@Testcontainers
public abstract class AbstractIntegrationTest {
@Container
// One container per JVM, not per class: Spring caches the context across test classes,
// and a per-class container would be stopped under the cached context.
@ServiceConnection
static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:17-alpine");
static {
postgres.start();
}
}
@@ -5,8 +5,6 @@ import org.springframework.boot.data.jpa.test.autoconfigure.DataJpaTest;
import org.springframework.boot.jdbc.test.autoconfigure.AutoConfigureTestDatabase;
import org.springframework.boot.testcontainers.service.connection.ServiceConnection;
import org.testcontainers.containers.PostgreSQLContainer;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;
/**
* Base class for persistence tests.
@@ -15,10 +13,14 @@ import org.testcontainers.junit.jupiter.Testcontainers;
@Tag("PersistenceTest")
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@Testcontainers
public abstract class AbstractPersistenceTest {
@Container
// One container per JVM, not per class: Spring caches the context across test classes,
// and a per-class container would be stopped under the cached context.
@ServiceConnection
static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:17-alpine");
static {
postgres.start();
}
}