Nemohu to s jistotou říci, aniž bych viděl vaši testovací konfiguraci, ale hádám, že to funguje s docker run
a ne Testcontainers, protože docker run
zpřístupní pevný port (vždy 27017), ale Testcontainers odhalí port 27017
jako náhodný port (aby se předešlo konfliktům portů na testovacích počítačích).
Chcete-li použít Testcontainers s testem Quarkus, vaše testy musí dodržovat tento postup:
- Spusťte kontejnery. To je nutné, protože náhodně vystavený port pro MongoDB může být znám až po kontejner byl spuštěn.
-
Po spuštění kontejnerů získejte randomizované porty z Testcontainers a poté nastavte vlastnosti konfigurace testu, které závisí na portech kontejneru. Například:
static GenericContainer mongodb = new GenericContainer<>("mongo:4.2").withExposedPorts(27017); static { mongodb.start(); System.setProperty("quarkus.mongodb.connection-string", "mongodb://" + mongodb.getContainerIpAddress() + ":" + mongodb.getFirstMappedPort()); }
- Nechte Quarkus začít. Protože Quarkus nepodporuje dynamickou konfiguraci, musíte před spuštěním Quarkusu nastavit port MongoDB.