Удаление H2 в памяти DB между тестами на интеграцию в maven - PullRequest
5 голосов
/ 26 ноября 2011

У меня есть следующий сценарий.У меня есть проект Hibernate-Spring, который работает на MySQL на производстве и использует базу данных H2 в памяти для интеграционных тестов, которая создается на лету.В настоящее время, когда я запускаю тесты на интеграцию с maven, я получаю ошибки, потому что база данных поддерживается между тестами.это недопустимо, потому что я планировал запускать свои тесты на новой БД.Как принудительно удалить все данные в БД между тестами?Есть ли способ сообщить maven, чтобы он отбрасывал схему и генерировал ее заново для каждого тестового файла?

Ответы [ 2 ]

3 голосов
/ 26 ноября 2011

Я бы взглянул на поддержку Spring для встроенных баз данных . Вы можете позволить Spring сделать создание и настройку базы данных для вас и предоставить вам доступ к ней как простой DataSource. Все, что вам действительно нужно сделать, это предоставить сценарии sql для создания / заполнения базы данных, и при каждом запуске база данных будет пересоздана.

<jdbc:embedded-database id="dataSource" type="h2">
    <jdbc:script location="classpath:schema.sql"/>
    <jdbc:script location="classpath:test-data.sql"/>
</jdbc:embedded-database>

Не забудьте про пространство имен jdbc:

http://www.springframework.org/schema/jdbc
http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
1 голос
/ 26 ноября 2011

Как вы проводите интеграционные тесты?Spring имеет встроенную поддержку транзакционных тестов.Также вы можете вручную DROP и воссоздавать базу данных после каждого теста, это довольно просто:

SCRIPT NOPASSWORDS DROP TO 'file.sql'

, а затем восстанавливать его с помощью:

RUNSCRIPT FROM 'file.sql'

Я полагаю, что практически все рамки тестирования JUnit / TestNG / Fitensse / Selenium / ... позволяет запускать некоторый пользовательский код перед всеми тестами и после каждого и каждого.

Здесь - это мой блог, объясняющий, как это работает, и пример настройки ScalaTest .

...