Spring / Hibernate-тестирование: вставка тестовых данных после создания DDL - PullRequest
17 голосов
/ 04 августа 2010

У меня есть веб-приложение Spring / Hibernate, в котором есть несколько интеграционных тестов, которые выполняются в базе данных HSQL в памяти.Hibernate берет эту пустую базу данных и создает все мои тестовые таблицы и ограничения благодаря hbm2ddl = create.Однако у меня есть новый компонент, который проверяет конкретное значение конфигурации из базы данных во время его метода afterPropertiesSet (), и поэтому, когда этот компонент инициализируется, такая строка должна существовать в базе данных.любой хороший способ настроить Java / Spring / Hibernate эквивалент тестовых приборов Rail?Я пытаюсь найти способ сказать Hibernate "всякий раз, когда вы создаете эту таблицу, вставляйте эти строки сразу после этого".Я не мог найти обратный вызов или хук, который мог бы добавить, но, возможно, есть другой способ.

Ответы [ 3 ]

27 голосов
/ 04 августа 2010

Я пытаюсь найти способ сообщить Hibernate «всякий раз, когда вы создаете эту таблицу, вставляйте эти строки сразу после этого» * ​​1002 *

Начиная с Hibernate 3.1, вы можете включить файл с именем import.sql в пути к классам выполнения Hibernate и во время экспорта схемы Hibernate выполнит операторы SQL, содержащиеся в этом файле, после экспорта схемы.

Эта функция была анонсирована в блоге Rotterdam JBug и Hibernate import.sql :

import.sql: легко импортируйте данные в своймодульные тесты

Hibernate имеет изящную небольшую функцию, которая сильно недокументирована и неизвестна.Вы можете выполнить сценарий SQL во время создания SessionFactory сразу после создания схемы базы данных, чтобы импортировать данные в новую базу данных.Вам просто нужно добавить файл с именем import.sql в корень пути к классам и установить create или create-drop в качестве свойства hibernate.hbm2ddl.auto.

Теперь я использую его для Hibernate Search in Action, когда у меня естьначал главу запроса.Он инициализирует мою базу данных свежим набором данных для моих модульных тестов.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');

Для получения дополнительной информации об этой функции, проверьте блог Eyal , он написал хорошую небольшую запись об этом,Помните, что если вы хотите добавить дополнительные объекты базы данных (индексы, таблицы и т. Д.), Вы также можете использовать функцию вспомогательных объектов базы данных.

Это все еще не совсем задокументировано.

6 голосов
/ 14 апреля 2011

В hibernate 3.6 конфигурация, которая позволяет запускать произвольные команды sql:

hibernate.hbm2ddl.import_files

См. В http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/, замечание, что в документации есть ошибка: свойство это import_files, с s в конце.

1 голос
/ 04 августа 2010

Если вы говорите о тестах JUnit и используете AbstractTransactionalDataSourceSpringContextTests есть методы, которые вы можете переопределить, например onSetupBeforeTransaction , которые обеспечивают перехват для предварительного заполнения данных тестовой таблицы и т. Д.

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