Não posso dizer com certeza sem ver sua configuração de teste, mas acho que funciona com
docker run
e não Testcontainers porque docker run
expõe uma porta fixa (sempre 27017), mas Testcontainers irá expor a porta 27017
como uma porta aleatória (para evitar conflitos de porta em máquinas de teste). Para usar Testcontainers com um teste do Quarkus, seus testes devem seguir este fluxo:
- Iniciar contêineres. Isso é necessário porque a porta exposta aleatória para MongoDB só pode ser conhecida depois o contêiner foi iniciado.
-
Obtenha portas aleatórias de Testcontainers depois que os contêineres forem iniciados e, em seguida, defina quaisquer propriedades de configuração de teste que dependam das portas do contêiner. Por exemplo:
static GenericContainer mongodb = new GenericContainer<>("mongo:4.2").withExposedPorts(27017); static { mongodb.start(); System.setProperty("quarkus.mongodb.connection-string", "mongodb://" + mongodb.getContainerIpAddress() + ":" + mongodb.getFirstMappedPort()); }
- Deixe o Quarkus começar. Como o Quarkus não oferece suporte à configuração dinâmica, você deve definir a porta do MongoDB antes que o Quarkus seja iniciado.