Как включить ссылочную целостность в модульных тестах HSQL Db in-memory - PullRequest
4 голосов
/ 29 июня 2011

У меня более 200 юнит-тестов для всего моего бэкэнда JPA, и все они отлично работают на hsql db 2.2.У меня есть тесты, выполняющиеся в среде непрерывной сборки, чтобы проверить стабильность системы.За исключением того, что когда я запускал их в Oracle 11, некоторые тесты не выполнялись с ограничениями ссылочной целостности.Это произошло из-за ошибки в моем коде, но тот факт, что я не смог найти их в hsqldb, беспокоит меня и нарушает весь смысл наличия db, совместимого с облегченной памятью, когда он не соответствует действительности!

Есть ли параметр, который я могу активировать для hsqldb, чтобы учитывать ссылочную целостность при выполнении тестов.Я подозреваю, что они игнорируются по умолчанию.Это мои настройки jdbc:

jdbc.driver=org.hsqldb.jdbcDriver
jdbc.url=jdbc:hsqldb:mem:SampleProject
jdbc.username=sa
jdbc.password=

Ответы [ 2 ]

3 голосов
/ 03 марта 2012

Вы можете использовать: «SET DATABASE REFERENTIAL INTEGRITY FALSE» и «SET DATABASE REFERENTIAL INTEGRITY TRUE» sql операторы

0 голосов
/ 30 июня 2011

HSQLDB очень строг в отношении ссылочной целостности, если он не выключен. Реализации JPA фактически используют разные стратегии в этой области для разных баз данных. Например, с одним механизмом базы данных реализация может определять внешние ключи с помощью каскадного удаления и удаления родительского объекта, но для другого механизма она может удалять дочерние объекты объекта перед удалением родительского объекта.

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

Возвращаясь к конкретному вопросу, если вы запустите один из ваших тестов с файловой базой данных, подобной этой:

jdbc.url=jdbc:hsqldb:file:/home/db/SampleProject;hsqldb.write_delay=false;shutdown=true

После теста вы можете открыть базу данных с помощью DatabaseManager и проверить таблицы и определения ограничений. Если JPA действительно создает внешние ключи, вы можете самостоятельно проверить, что HSQLDB применяет ограничения, если вы попытаетесь вставить или удалить некоторые из них.

...