MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Test di integrazione con Testcontainers + Quarkus + MongoDB

Non posso dirlo con certezza senza vedere la tua configurazione di test, ma suppongo che funzioni con docker run e non Testcontainer perché docker run espone una porta fissa (sempre 27017) ma Testcontainers esporrà la porta 27017 come porta casuale (per evitare conflitti di porta sulle macchine di prova).

Per utilizzare Testcontainer con un test Quarkus, i tuoi test devono seguire questo flusso:

  1. Avvia i contenitori. Ciò è necessario perché la porta esposta casuale per MongoDB può essere conosciuta solo dopo il contenitore è stato avviato.
  2. Ottieni porte randomizzate da Testcontainer dopo l'avvio dei contenitori, quindi imposta le proprietà di configurazione del test che dipendono dalle porte del contenitore. Ad esempio:

    static GenericContainer mongodb = new GenericContainer<>("mongo:4.2").withExposedPorts(27017);
    static {
      mongodb.start();
      System.setProperty("quarkus.mongodb.connection-string",
                         "mongodb://" + mongodb.getContainerIpAddress() + ":" + mongodb.getFirstMappedPort());
    }
    
  3. Che Quarkus inizi. Poiché Quarkus non supporta la configurazione dinamica, è necessario impostare la porta MongoDB prima dell'avvio di Quarkus.