testcontainers-go поднимает реальные контейнеры (Postgres, Redis, Kafka) на время тестов. Создают контейнер через testcontainers.GenericContainer, получают хост и порт, подключаются из теста. После теста контейнер останавливается. Подходит для интеграционных тестов без моков.
ctx := context.Background()
req := testcontainers.ContainerRequest{Image: "postgres:15", ...}
pg, _ := testcontainers.GenericContainer(ctx, req)
pg.Start(ctx)
host, _ := pg.Host(ctx)
port, _ := pg.MappedPort(ctx, "5432")
// use host:port in test
defer pg.Terminate(ctx)