Тестирование Spring / гибернации:Вставка тестовых данных после создания DDL
-
25-09-2019 - |
Вопрос
У меня есть веб-приложение Spring / Hibernate, в котором есть несколько интеграционных тестов, которые выполняются в базе данных HSQL в памяти.Hibernate берет эту пустую базу данных и создает все мои тестовые таблицы и ограничения благодаря hbm2ddl=create .Однако у меня есть новый компонент, который проверяет наличие определенного значения конфигурации из базы данных во время своего метода afterPropertiesSet(), и поэтому, когда этот компонент инициализируется, такая строка должна существовать в базе данных.
Есть ли какой-нибудь хороший способ настроить Java / Spring / Hibernate эквивалент тестовых устройств Rail?Я пытаюсь найти способ сообщить Hibernate: "всякий раз, когда вы создаете эту таблицу, вставляйте эти строки сразу после этого".Я не смог найти обратный вызов или хук, который я мог бы добавить, но, возможно, есть другой способ.
Решение
Я пытаюсь найти способ сообщить Hibernate: "всякий раз, когда вы создаете эту таблицу, вставляйте эти строки сразу после этого".
Начиная с Hibernate 3.1, вы можете включить файл под названием import.sql
в пути к классу среды выполнения Hibernate и во время экспорта схемы Hibernate выполнит инструкции SQL, содержащиеся в этом файле, после экспорта схемы.
Эта функция была анонсирована в Роттердамский JBug и импорт Hibernate.sql запись в блоге:
импорт.sql:легко импортируйте данные в свои модульные тесты
В Hibernate есть небольшая аккуратная функция которая сильно недокументирована и неизвестна.Вы можете выполнить SQL-скрипт во время
SessionFactory
создание сразу после создания схемы базы данных генерация для импорта данных в новую базу данных.Вам просто нужно добавить файл с именемimport.sql
в вашем пути к классу root и установите либоcreate
илиcreate-drop
как вашhibernate.hbm2ddl.auto
собственность.Я использую его для поиска в режиме гибернации в Действие теперь, когда я начал раздел запрос.Он инициализирует мою базу данных свежим набором данных для моих модульных тестов.JBoss Seam также часто использует его в различных примерах.
import.sql
это очень простая функция но в свое время весьма полезная.Помните что SQL может зависеть от вашей базы данных (ах, переносимость!).#import.sql file delete from PRODUCTS insert into PRODUCTS (PROD_ID, ASIN, TITLE, PRICE, IMAGE_URL, DESCRIPTION) values ('1', '630522577X', 'My Fair Lady', 19.98, '630522577X.jpg', 'My Fair blah blah...'); insert into PRODUCTS (PROD_ID, ASIN, TITLE, PRICE, IMAGE_URL, DESCRIPTION) values ('2', 'B00003CXCD', 'Roman Holiday ', 12.98, 'B00003CXCD.jpg', 'We could argue that blah blah');
Для получения дополнительной информации об этой функции проверьте Блог Эяла, он написал об этом милую маленькую заметку.Помните, что если вы хотите добавить дополнительные объекты базы данных (индексы, таблицы и так далее), вы также можете использовать вспомогательную функцию объекты базы данных.
На самом деле это до сих пор не задокументировано.
Другие советы
В Hibernate 3.6 конфигурация, которая позволяет запускать произвольные команды SQL:
hibernate.hbm2ddl.import_files.
Увидимся http://docs.jboss.org/hibernate/core/3.6/reference/en-us/html_single/, Замечание, что в документации есть ошибка: свойство Import_Files, с помощью S в конце.
Если вы говорите о Junit Tests и используете Абсолюttransactionaldatasourcespringcontextestes. Есть методы, которые вы можете переопределить, как ONSETUPBEFORETRETANCANCE которые обеспечивают крюку для предварительного заполнения данных тестовой таблицы и т. Д.