MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Integrationstests mit Testcontainern + Quarkus + MongoDB

Ich kann es nicht mit Sicherheit sagen, ohne Ihre Testkonfiguration zu sehen, aber ich vermute, dass es mit docker run funktioniert und nicht Testcontainers, weil docker run legt einen festen Port (immer 27017) offen, aber Testcontainers legt Port 27017 offen als zufälliger Port (um Portkonflikte auf Testmaschinen zu vermeiden).

Um Testcontainer mit einem Quarkus-Test zu verwenden, müssen Ihre Tests diesem Ablauf folgen:

  1. Container starten. Dies ist notwendig, da der zufällig verfügbar gemachte Port für MongoDB erst nach bekannt sein kann Der Container wurde gestartet.
  2. Rufen Sie randomisierte Ports von Testcontainern ab, nachdem Container gestartet wurden, und legen Sie dann alle Testkonfigurationseigenschaften fest, die von Containerports abhängen. Zum Beispiel:

    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. Lass Quarkus starten. Da Quarkus keine dynamische Konfiguration unterstützt, müssen Sie den MongoDB-Port festlegen, bevor Quarkus startet.