Не могу сказать наверняка, не увидев вашу тестовую конфигурацию, но я предполагаю, что она работает с docker run
, а не с Testcontainers, потому что docker run
предоставляет фиксированный порт (всегда 27017), но Testcontainers отображает порт 27017
как случайный порт (чтобы избежать конфликтов портов на тестовых машинах).
Чтобы использовать Testcontainers с тестом Quarkus, ваши тесты должны следовать следующему потоку:
- Запустить контейнеры. Это необходимо, потому что случайный открытый порт для MongoDB может быть известен только после , когда контейнер был запущен.
Получите рандомизированные порты из Testcontainers после запуска контейнеров, затем установите все свойства конфигурации теста, которые зависят от портов контейнера. Например:
static GenericContainer mongodb = new GenericContainer<>("mongo:4.2").withExposedPorts(27017);
static {
mongodb.start();
System.setProperty("quarkus.mongodb.connection-string",
"mongodb://" + mongodb.getContainerIpAddress() + ":" + mongodb.getFirstMappedPort());
}
- Пусть Quarkus начнется. Поскольку Quarkus не поддерживает динамическую конфигурацию c, необходимо установить порт MongoDB до запуска Quarkus.