Создание временной базы данных, которая работает на всех этапах тестирования?

Я присоединился к проекту, в котором много файлов с операторами SQL для создания базы данных, которая используется для интеграционного тестирования.

Мне интересно, как я могу использовать эти файлы для создания базы данных для модульного тестирования (с использованием Java и Maven).

Я могу создать базу данных HSQL в памяти для каждого модульного теста или даже использовать функцию встроенной базы данных spring jdbc, но в настройках теста так много операторов SQL, что они не масштабируются.

Поэтому я хотел бы создать временную базу данных (которая загружает операторы SQL) в начале фазы тестирования maven, иметь модульные тесты для доступа к этой временной базе данных и выполнять различные операции, а затем удалить временную базу данных в конце maven. фаза испытаний.

Я посмотрел на sql-maven-plugin, который позволил бы мне выполнять этапы тестирования, но я не уверен, как настроить временную базу данных, которая будет доступна во всех модульных тестах. Там нет сервера для подключения, и база данных в памяти не будет работать через несколько модульных тестов (я полагаю).

Одним из вариантов может быть использование уникального временного файла, например, указание URL-адреса драйвера JDBC в виде jdbc:hsqldb:file:/path/to/ временный / файл, но я не уверен, как создать уникальный временный файл в maven.

Любые предложения о том, как это сделать, или есть ли лучший подход?

Обновление: я решил использовать файловую базу данных, созданную в каталоге target / db. Я использую плагин maven clean для удаления каталога target / db до запуска тестов и плагин maven sql для создания базы данных из сценариев.

2 ответа

Для этого случая я создал плагин derby-maven-plugin. Он доступен в Maven Central, поэтому вам не нужно добавлять дополнительные репозитории или что-то еще.

Вы можете использовать это так:

    <project ...>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.carlspring.maven</groupId>
                    <artifactId>derby-maven-plugin</artifactId>
                    <version>1.8</version>
                    <configuration>
                        <basedir>${project.build.directory}/derby</basedir>
                        <port>1527</port>
                    </configuration>
                    <executions>
                        <execution>
                            <id>start-derby</id>
                            <phase>pre-integration-test</phase>
                            <goals>
                                <goal>start</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>stop-derby</id>
                            <phase>post-integration-test</phase>
                            <goals>
                                <goal>stop</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </project>

Для получения дополнительной информации вы также можете проверить использование.

  1. Почему бы не создать базу данных H2 на диске, чтобы каждый тест имел к ней доступ? Пока тесты не работают параллельно или не взаимодействуют друг с другом, вам не нужен сервер.

  2. Тем более: просто создайте базы данных памяти в @Before и удалите их в @After. Вы уверены, что это слишком медленно?

  3. В тесте перед интеграцией вы можете запустить сервер H2 (или derby) и завершить его в тесте после интеграции.

  4. Вы можете написать плагин maven, который использует состояние сеанса для отслеживания встроенной службы базы данных, но это почти то же самое, что (3).

Другие вопросы по тегам