Как заполнить данные в тестовых контейнерах? - PullRequest
0 голосов
/ 18 июня 2020

КОНТЕКСТ:

У меня есть приложение, отличное от Spring Boot, которое я помещаю в Spring Boot, чтобы проверить функциональность. Случилось так, что код имел базу данных в памяти в тестах, я хочу протестировать с другой базой данных для воспроизведения производственной среды. Я решил использовать go с testcontainers, чтобы не трогать все существующие тесты.

ПРОБЛЕМА:

Мне нужно загрузить миллионы строк в тестовый контейнер. Вопрос в том, как заполнить базу при testcontainers? Я нашел аналогичный вопрос -> Как заполнить testcontainers? , но я все еще не могу понять, как заполнить его данными.

Как я могу заполнить данные в testcontainers?

DatabaseTestInitalizer.java Я использую для создания экземпляра контейнера:

Ответы [ 3 ]

0 голосов
/ 18 июня 2020

Когда я работал с подобной установкой, я реализовал следующий подход:

  1. Я управлял схемой в Flyway, которая в любом случае интегрирована с Spring boot. Все миграции были связаны с определениями схемы и ничего не повлияли на данные. Я поместил их в src/main/sesources/... (не в путь к тестовым классам), потому что они также были актуальны для обычного запуска приложения.

  2. Я создал специальные миграции для тестов, которые заполняют тестовые данные. Эти миграции были под src/test/resources моего модуля. Эти «тестовые» миграции были написаны таким образом, что они всегда начинались после обычных миграций.

  3. Я настроил Flyway для запуска перед тестом, чтобы он заполнил тестовые данные.

В конце концов, основная идея отделить код теста от генерации данных.

Это сработало для нас, поэтому я могу порекомендовать этот подход.

Сказав, что, если вы используете Spring, есть и другие способы:

  • Добавить данные «вручную» в настройке, если вы используете JPA. Выполните вызов этого кода до того, как начнутся тесты.
  • Используйте аннотацию @Sql для запуска скрипта с тестовыми данными. В общем, есть много вариантов, прочтите этот учебник для получения дополнительной информации
0 голосов
/ 25 июня 2020

Как выяснилось после более тщательного поиска, я могу использовать withInitScript и определить схему плюс данные в init.sql, убедитесь, что db/init.sql находится в папке test / resources.

Это работает как показано ниже:

public MSSQLServerContainer mssqlServerContainer = (MSSQLServerContainer) new MSSQLServerContainer()
            .withInitScript("db/init.sql")
            .withExposedPorts(1433);

В этом случае вам не нужно Flyway.

0 голосов
/ 18 июня 2020

у вас есть два варианта:

  1. создать контейнер из файла докеров Ссылки: файл докеров testcontainer Настройте свою MySQL базу данных в Docker
  2. вы можете использовать инструменты миграции базы данных, такие как flyway , и база данных будет автоматически заполнена
...