Class PostgresTestResource

java.lang.Object
br.com.xadm.comum.teste.PostgresTestResource

public final class PostgresTestResource extends Object
Sobe um único 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 Details

    • start

      public static void start()
      Inicia o container (idempotente); no-op se já iniciado.
      Throws:
      IllegalStateException - se o container não sobe
    • container

      public static org.testcontainers.containers.PostgreSQLContainer<?> container()
      Returns o container em execução (ou null se start() ainda não rodou).
      Returns:
      o container em execução (ou null se start() ainda não rodou)
    • datasourceProperties

      public static Map<String,String> datasourceProperties()
      Propriedades para TestPropertyProvider (sobrescrevem application.yml). Inicia o container se necessário.
      Returns:
      mapa datasources.default.*
    • limparTabelas

      public static void limparTabelas() throws SQLException
      Zera as tabelas do schema public com TRUNCATE … 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 base IntegracaoComPostgres já 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