Тестирование Spring / гибернации:Вставка тестовых данных после создания DDL

StackOverflow https://stackoverflow.com/questions/3408991

Вопрос

У меня есть веб-приложение 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 которые обеспечивают крюку для предварительного заполнения данных тестовой таблицы и т. Д.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top