Ik kan het niet met zekerheid zeggen zonder je testconfiguratie te zien, maar ik vermoed dat het werkt met docker run
en niet Testcontainers omdat docker run
stelt een vaste poort bloot (altijd 27017) maar Testcontainers geeft poort 27017
weer als een willekeurige poort (om poortconflicten op testmachines te voorkomen).
Om Testcontainers met een Quarkus-test te gebruiken, moeten uw tests deze stroom volgen:
- Start containers. Dit is nodig omdat de willekeurig blootgestelde poort voor MongoDB alleen bekend kan zijn na de container is gestart.
-
Verkrijg gerandomiseerde poorten van Testcontainers nadat containers zijn gestart en stel vervolgens eventuele testconfiguratie-eigenschappen in die afhankelijk zijn van containerpoorten. Bijvoorbeeld:
static GenericContainer mongodb = new GenericContainer<>("mongo:4.2").withExposedPorts(27017); static { mongodb.start(); System.setProperty("quarkus.mongodb.connection-string", "mongodb://" + mongodb.getContainerIpAddress() + ":" + mongodb.getFirstMappedPort()); }
- Laat Quarkus beginnen. Aangezien Quarkus geen dynamische configuratie ondersteunt, moet u de MongoDB-poort instellen voordat Quarkus start.