Автоматическое обновление схемы базы данных для модульных тестов проекта Java - PullRequest
0 голосов
/ 22 декабря 2010

У меня есть проект Java, который должен заполнить базу данных новой схемой перед выполнением модульных тестов.Maven используется для создания проекта.Unitils используется для юнит-тестов.

Я планировал выполнить следующие сценарии в следующем порядке:

  1. Сценарий удаления / создания базы данных (dropcreate.sql)
  2. Сценарий схемы (schema.sql)
  3. Сценарий справочных данных (reference.sql)

В качестве дополнительного преимущества я могу видеть, больше ли сценарий справочных данных не соответствует схеме, если он не выполняется.

Я использовал плагин hibernate3 для Maven для генерации скрипта схемы во время сборки.Я также использовал maven-antrun-plugin для копирования всех этих сценариев в один каталог (target / dbscripts) с номерами в порядке выполнения, например:

  • 001_dropcreate.sql
  • 002_schema.sql
  • 003_reference.sql

План состоял в том, чтобы часть unitils DBMaintainer запускала сценарии, как отмечено в Учебник по Unitils ,используя следующий (продезинфицированный) файл unitils.properties в src / test / resources:

database.driverClassName=com.sybase.jdbc3.jdbc.SybDriver
database.url=jdbc:sybase:Tds:mydatabase.server.example.com:9000/my_database
database.userName=myusername
database.password=mypassword
database.dialect=org.hibernate.dialect.SybaseDialect
database.schemaNames=dbo
DatabaseModule.Transactional.value.default=disabled
org.unitils.core.dbsupport.DbSupport.implClassName=org.unitils.core.dbsupport.MsSqlDbSupport
DbUnitModule.DataSet.loadStrategy.default=com.example.dao.SybaseCleanInsertLoadStrategy
updateDataBaseSchema.enabled=true
dbMaintainer.script.locations=target/dbscripts
dbMaintainer.cleanDb.enabled=true
dataSetStructureGenerator.xsd.dirName=target/xsd

Unitils загружает наборы данных и проводит модульные тесты нормально, но, похоже, никогда не запускает сценарии.Я уверен, что это что-то простое, я пропускаю.

Альтернативой было использование плагина sql-maven-plugin, но я не смог заставить его работать во время процесса-test-resources, поэтому я выдвинул эту идею на данный момент.

Как заставить Unitils фактически выполнить SQL и, если возможно, потерпеть неудачу, если SQL не может быть выполнен?

Ответы [ 2 ]

0 голосов
/ 22 декабря 2010

Будет ли использование чего-то вроде DBUnit сделать жизнь проще?Он выглядит после создания и заполнения таблиц для тестирования.

0 голосов
/ 22 декабря 2010

Не могли бы вы дать больше информации?Было ли что-то в логах?Следует упомянуть что-то вроде:
Проверка необходимости обновления базы данных.

Вы уверены, что в target / dbscripts есть сценарии на момент выполнения теста?

Были ли какие-либоЗагружены unitils-local.properties, в которых для свойства updateDataBaseSchema установлено значение false?

В настоящий момент unitils все еще использует свою собственную версию dbmaintainer.В следующем выпуске будет полная интеграция с самим dbmaintain (альфа выйдет на следующей неделе).

Обратите внимание, что в dbmaintain также есть задачи maven для запуска сценариев базы данных.Взгляните на www.dbmaintain.org для получения дополнительной информации.

brgds, Тим

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...