From 474a5dd5702b9c7cd3def4b0703e4956de1ce30d Mon Sep 17 00:00:00 2001 From: lobo Date: Thu, 24 Sep 2026 11:22:29 +0200 Subject: [PATCH] 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". --- .../shared/test/AbstractIntegrationTest.java | 10 ++++++---- .../shared/test/AbstractPersistenceTest.java | 10 ++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/test/java/core_service/shared/test/AbstractIntegrationTest.java b/src/test/java/core_service/shared/test/AbstractIntegrationTest.java index 1fdc8a9..a2ffb6a 100644 --- a/src/test/java/core_service/shared/test/AbstractIntegrationTest.java +++ b/src/test/java/core_service/shared/test/AbstractIntegrationTest.java @@ -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(); + } } diff --git a/src/test/java/core_service/shared/test/AbstractPersistenceTest.java b/src/test/java/core_service/shared/test/AbstractPersistenceTest.java index eabf470..94ca882 100644 --- a/src/test/java/core_service/shared/test/AbstractPersistenceTest.java +++ b/src/test/java/core_service/shared/test/AbstractPersistenceTest.java @@ -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(); + } }