Автоинкремент с HSQL, Hibernate и Spring и тестами - PullRequest
1 голос
/ 12 января 2012

У меня есть несколько интеграционных тестов, которые создают БД HSQL из сущностей JPA.Все это хорошо работает, кроме идентификатора автоинкремента.Кажется, они хранятся между тестами и не сбрасываются.Например, если я добавлю два элемента в тесте 1, тогда значение идентификатора в HSQL для этих двух строк будет равно 1 и 2. В моей настройке я затем уничтожу БД.В тесте 2 я добавляю один элемент, а идентификатор равен 3, а не обратно 1. Я использую Spring в качестве менеджера транзакций и подключаю все свои зависимости.Кто-нибудь знает, что может быть причиной этого?

Я не хочу проверять идентификаторы как таковые, но я нахожу это раздражающим.

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 12 января 2012

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

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

0 голосов
/ 12 января 2012

Попробуйте Unitils . Этот инструмент выполняет удаление таблиц БД и их автоматическое воссоздание для каждого теста. Конечно, у вас есть другие варианты, которые вы можете выбрать. Они были взяты из здесь ,

  • CleanInsertLoadStrategy : вставить набор данных после удаления всех данных, присутствующих в настоящее время в таблицах, указанных в наборе данных
  • InsertLoadStrategy : просто вставьте набор данных в базу данных
  • RefreshLoadStrategy : «Обновить» содержимое базы данных содержимым набора данных. Это означает, что данные существующих строк обновляются, а несуществующие строки вставляются. Любые строки в базе данных, но не в наборе данных, остаются неизменными
  • UpdateLoadStrategy : обновить содержимое базы данных содержимым набора данных. Это означает, что данные существующих строк обновляются. Сбой, если набор данных содержит записи, которых нет в базе данных (т.е. записи, имеющие одинаковое значение для столбца первичного ключа).

Может быть, вы найдете этот инструмент полезным.

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