Интеграционное тестирование с Testcontainers + Quarkus + MongoDB - PullRequest
2 голосов
/ 26 апреля 2020

Испытание тестконтейнеров для интеграционного тестирования. Я тестирую конечную точку остальных API. Вот технологический стек - quarkus, RESTEasy и mongodb-client

Я вижу, что контейнер MongoDB запущен успешно, но получаю исключение. Исключение: «com.mongodb. https://www.testcontainers.org/quickstart/junit_5_quickstart/

@Container
    static GenericContainer mongodb = new GenericContainer<>("mongo:4.2").withExposedPorts(27017);

1 Ответ

2 голосов
/ 27 апреля 2020

Не могу сказать наверняка, не увидев вашу тестовую конфигурацию, но я предполагаю, что она работает с docker run, а не с Testcontainers, потому что docker run предоставляет фиксированный порт (всегда 27017), но Testcontainers отображает порт 27017 как случайный порт (чтобы избежать конфликтов портов на тестовых машинах).

Чтобы использовать Testcontainers с тестом Quarkus, ваши тесты должны следовать следующему потоку:

  1. Запустить контейнеры. Это необходимо, потому что случайный открытый порт для MongoDB может быть известен только после , когда контейнер был запущен.
  2. Получите рандомизированные порты из Testcontainers после запуска контейнеров, затем установите все свойства конфигурации теста, которые зависят от портов контейнера. Например:

    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. Пусть Quarkus начнется. Поскольку Quarkus не поддерживает динамическую конфигурацию c, необходимо установить порт MongoDB до запуска Quarkus.
...