У меня есть проект Java, который должен заполнить базу данных новой схемой перед выполнением модульных тестов.Maven используется для создания проекта.Unitils используется для юнит-тестов.
Я планировал выполнить следующие сценарии в следующем порядке:
- Сценарий удаления / создания базы данных (dropcreate.sql)
- Сценарий схемы (schema.sql)
- Сценарий справочных данных (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 не может быть выполнен?