Как управлять тестовыми данными для интеграционных тестов Hibernate Search - PullRequest
0 голосов
/ 09 ноября 2011

У меня есть система на основе Spring, которая использует Hibernate Search 3.4 (поверх Hibernate 3.5.4). Интеграционные тесты управляются Spring с аннотацией @Transactional. На данный момент тестовые данные (объекты, которые должны быть проиндексированы) загружаются скриптом Liquibase, мы используем его интеграцию с Spring. Управлять очень неудобно.

Мое новое решение состоит в том, чтобы тестовые данные определялись как Spring bean-компоненты и связывались с ними как Resources по имени. Эта часть работает.

Я пытался сохранить эти bean-компоненты и проиндексировать их в методе setUp моих тестовых случаев (и в самих тестовых методах), но мне это не удалось. Они хорошо попадают в БД, но я не могу их проиндексировать. Я попытался вызвать index () для FullTextEntityManager (с flushToIndexes), я попытался createIndexer().startAndWait().

Что еще я могу сделать? Или может быть есть какой-то лучший вариант тестирования HS?

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

Ответы [ 2 ]

2 голосов
/ 15 ноября 2011

Мое новое решение состоит в том, чтобы тестовые данные определялись как Spring bean-компоненты и связывались с ними как Resources по имени.Эта часть работает.

звучит как странная установка для юнит-теста.Честно говоря, я не совсем уверен, как вы это делаете.

В самом Поиске база данных в памяти (H2) используется вместе с директорией Lucene RAM.Преимущества такой настройки в том, что она позволяет быстро и легко избежать зависимости между тестами.

Я пытался сохранить эти bean-компоненты и проиндексировать их в методе setUp моих тестовых случаев (и в самих тестовых методах), но мне не удалось.Они хорошо попадают в БД, но я не могу их проиндексировать.

Если автоматическая индексация включена и в транзакции происходит сохранение тестовых данных, это должно работать.Распространенная ошибка в сочетании с Spring - использование неправильного менеджера транзакций.На форуме Hibernate Search есть множество тем, например, об этом - https://forum.hibernate.org/viewtopic.php?f=9&t=998155. Поскольку вы не даете никакой конкретной конфигурации и примеров кода, трудно дать более конкретный совет.

Я попробовал createIndexer (). StartAndWait ()

, это тоже хороший подход.Я бы порекомендовал этот подход, если вы хотите вставить не такую ​​пару тестовых объектов, а целый набор данных.В этом случае может иметь смысл использовать каркас, такой как dbunit, для вставки тестовых данных, а затем вручную индексировать данные. createIndexer (). StartAndWait () - правильный инструмент для этого.Извлечение всей этой функции загрузки / сохранения / индексации в общий базовый класс тестирования - это путь.Базовый класс также может отвечать за всю загрузку Spring.

Опять же, чтобы дать более конкретную обратную связь, вы должны уточнить свой вопрос.

1 голос
/ 27 апреля 2019

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

Чтобы решить эту проблему, я создал Random-JPA . Это просто и легко интегрировать. Вся идея в том, что вы создаете свежие данные и тестируете.

Вы можете найти полная документация здесь

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