Nie mogę powiedzieć na pewno, nie widząc konfiguracji testowej, ale zgaduję, że działa z docker run
a nie Testcontainers, ponieważ docker run
ujawnia stały port (zawsze 27017), ale kontenery testowe ujawnią port 27017
jako losowy port (aby uniknąć konfliktów portów na maszynach testowych).
Aby używać kontenerów testowych z testem Quarkus, twoje testy muszą być zgodne z następującym przepływem:
- Uruchom kontenery. Jest to konieczne, ponieważ losowy ujawniony port dla MongoDB może być znany dopiero po kontener został uruchomiony.
-
Uzyskaj losowe porty z Testcontainers po uruchomieniu kontenerów, a następnie ustaw dowolne właściwości konfiguracji testu, które zależą od portów kontenerów. Na przykład:
static GenericContainer mongodb = new GenericContainer<>("mongo:4.2").withExposedPorts(27017); static { mongodb.start(); System.setProperty("quarkus.mongodb.connection-string", "mongodb://" + mongodb.getContainerIpAddress() + ":" + mongodb.getFirstMappedPort()); }
- Niech Quarkus zacznie. Ponieważ program Quarkus nie obsługuje konfiguracji dynamicznej, musisz ustawić port MongoDB przed uruchomieniem programu Quarkus.