Class PostgresTestResource
PostgreSQLContainer (postgres:18-alpine) compartilhado entre todos
os testes de integração da mesma JVM — o Postgres de teste padrão da casa.
Use datasourceProperties() em TestPropertyProvider#getProperties() para o
Micronaut apontar para o container. Também define System.setProperty(String, String) para ferramentas
fora do TestPropertyProvider.
O diretório de dados roda em tmpfs (/var/lib/postgresql, o caminho do Postgres 18+): o
banco de teste é descartável e sobe mais rápido em memória. Se o container não sobe (Docker fora do
ar ou inacessível ao Testcontainers), start() lança uma IllegalStateException que
diz isso, com a causa original.
O recurso é uma classe utilitária, e a condição de pular sem Docker mora na classe de teste:
quem estende IntegracaoComPostgres já a recebe; quem chama o recurso direto anota
IntegracaoDocker, senão a classe falha com a exceção acima em vez de pular com aviso.
-
Method Summary
Modifier and TypeMethodDescriptionstatic org.testcontainers.containers.PostgreSQLContainer<?> Returns o container em execução (ounullsestart()ainda não rodou).Propriedades paraTestPropertyProvider(sobrescrevemapplication.yml).static voidZera as tabelas do schemapubliccomTRUNCATE … RESTART IDENTITY CASCADE, menos o histórico do Flyway (flyway%).static voidstart()Inicia o container (idempotente); no-op se já iniciado.
-
Method Details
-
start
public static void start()Inicia o container (idempotente); no-op se já iniciado.- Throws:
IllegalStateException- se o container não sobe
-
container
-
datasourceProperties
-
limparTabelas
Zera as tabelas do schemapubliccomTRUNCATE … RESTART IDENTITY CASCADE, menos o histórico do Flyway (flyway%). Roda numa conexão direta ao container, fora do pool e da transação do teste, e inicia o container se necessário.O banco do singleton sobrevive entre classes de teste: chamado num
@BeforeEach, cada teste começa sobre banco vazio. A baseIntegracaoComPostgresjá faz isso; o método serve a quem estende outra base.Tabela semeada por migration também é zerada, e o Flyway não regrava o seed: app com seed escreve a própria limpeza, só das tabelas que os testes gravam.
- Throws:
SQLException- se a limpeza falha no banco
-