Не мога да кажа със сигурност, без да видя тестовата ви конфигурация, но предполагам, че работи с 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 не поддържа динамична конфигурация, трябва да зададете порта на MongoDB, преди да стартира Quarkus.