Jag kan inte säga säkert utan att se din testkonfiguration, men jag gissar att det fungerar med docker run
och inte Testcontainers eftersom docker run
exponerar en fast port (alltid 27017) men Testcontainers kommer att exponera port 27017
som en slumpmässig port (för att undvika portkonflikter på testmaskiner).
För att använda Testcontainers med ett Quarkus-test måste dina tester följa detta flöde:
- Starta behållare. Detta är nödvändigt eftersom den slumpmässiga exponerade porten för MongoDB bara kan kännas efter behållaren har startats.
-
Skaffa randomiserade portar från Testcontainers efter att containrar har startat, ställ sedan in eventuella testkonfigurationsegenskaper som beror på containerportar. Till exempel:
static GenericContainer mongodb = new GenericContainer<>("mongo:4.2").withExposedPorts(27017); static { mongodb.start(); System.setProperty("quarkus.mongodb.connection-string", "mongodb://" + mongodb.getContainerIpAddress() + ":" + mongodb.getFirstMappedPort()); }
- Låt Quarkus börja. Eftersom Quarkus inte stöder dynamisk konfiguration måste du ställa in MongoDB-porten innan Quarkus startar.