Spring/Hibernate testing: Inserting test data after DDL creation

I have a Spring/Hibernate webapp that has some integration tests that run on an in-memory HSQL database. Hibernate takes this blank database and creates all of my test tables and constraints thanks to hbm2ddl=create. However, I have a new bean that checks for a particular config value from the database during its afterPropertiesSet() method, and so when this bean is initialized, such a row needs to exist in the database.

Is there any good way to set up a Java/Spring/Hibernate equivalent of Rail's test fixtures? I'm trying to find a way to tell Hibernate "whenever you create this table, insert these rows immediately afterwards". I couldn't find a callback or a hook I could add, but maybe there's another way.

17
задан Pascal Thivent 14 August 2010 в 23:20
поделиться

2 ответа

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

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

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

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

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

Я использую его для поиска гибернации в Действие теперь, когда я начал запросить главу. Он инициализирует мой база данных со свежим набором данных для мои модульные тесты. JBoss Seam также использует его много в различных примерах. import.sql - очень простая функция но время от времени весьма полезно. Помните что SQL может зависеть от ваша база данных (ах переносимость!).

 # файл import.sql
удалить из ПРОДУКТОВ
вставить в ПРОДУКТЫ (PROD_ID, ASIN, TITLE, PRICE, IMAGE_URL, DESCRIPTION) значения ('1', '630522577X', 'My Fair Lady', 19.98, '630522577X.jpg', 'My Fair бла-бла ...');
вставить в ПРОДУКТЫ (PROD_ID, ASIN, TITLE, PRICE, IMAGE_URL, DESCRIPTION) значения ('2', 'B00003CXCD', 'Roman Holiday', 12.98, 'B00003CXCD.jpg', 'Мы могли бы спорить, что бла-бла');

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

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

27
ответ дан 30 November 2019 в 12:06
поделиться

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

1
ответ дан 30 November 2019 в 12:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: