Для TestNG, каков правильный метод для предварительного заполнения источника данных, содержащего сложную модель, когда он будет запрашиваться с помощью Hibernate? - PullRequest
3 голосов
/ 13 октября 2010

Я хочу написать тесты для внутренней поисковой системы нашего веб-сайта на основе Seam Framework, использующей для запросов индексирование Hibernate + Lucene (в DB2).Каково наилучшее решение для заполнения источника данных перед запуском комплекта TestNG, когда модель данных проекта довольно сложна с учетом взаимосвязей сущностей и ограничений полей?Для некоторых тестовых случаев, по крайней мере, дюжине таблиц базы данных потребуются строки, относящиеся друг к другу, чтобы соответствовать ограничениям модели данных.В идеале будет использоваться Hypersonic, так как использование в памяти сократит время выполнения нашего процесса сборки.

Надеюсь, мой вопрос ясен, так как трудно сформулировать полную картину моей проблемы, не выбрасывая огромную стену описательного текста.и проприетарный код.По сути, создание каждой сущности программно (создание экземпляров всех объектов через объект Home Hibernate, установка каждого свойства, сохранение в источнике данных и фиксация транзакции в FacesRequest @Test) слишком громоздко, учитывая модель данных и сценарий populate.sql, который мы уже написали(и выполняется в DB2 для локального запуска нашего веб-сайта на JBoss) не может использоваться на Hypersonic!И каждый пример TestNG, с которым я сталкиваюсь в Интернете или в книгах, содержит чрезвычайно простые наборы данных, которые не указывают на четкий подход к моей проблеме.

Ответы [ 2 ]

3 голосов
/ 13 октября 2010

Для создания ваших сложных данных и, в то же время, для скрытия сложных настроек, мой совет - использовать шаблон компоновщика, который описан здесь Он позволяет создавать такие вещи, как

Person person = PersonBuilder.validPerson()
                             .withAddress(AddressBuider.validAddress())
                             .build();

О совместимости h2 и db2. Современная книга POJO в действии гласит:

Одной из проблем при использовании базы данных в памяти является обеспечение того, чтобы ее схема была идентична схеме производственной базы данных. Это не проблема, если платформа ORM генерирует схему базы данных. Однако , если схема производственной базы данных поддерживается отдельно , то ее определение может быть несовместимо с базой данных в памяти. Он мог бы, например, использовать специфичные для поставщика типы данных и другие функции. Чтобы использовать базу данных в памяти, вам нужно будет использовать другое определение схемы или сгенерировать ее схему из ORM . В любом случае нет никакой гарантии, что база данных в памяти имеет ту же схему, что и производственная база данных.

Несмотря на то, что ваш вопрос связан с гиперзвуком, H2 функции включают в себя

  • Режимы совместимости для IBM DB2 , Apache Derby, HSQLDB, MS SQL Server, MySQL, Oracle и PostgreSQL.

Может быть, это может решить, что вы хотите. Попробуй.

Разностные подходы могут использоваться для заполнения данных, необходимых для тестирования. Полезное руководство объясняется шаблонами установки приборов XUnit .

Другие инструменты, которые могут вам помочь

2 голосов
/ 13 октября 2010

По сути, создание каждой сущности программно (...) слишком громоздко, учитывая модель данных и сценарий populate.sql, который мы уже написали (и он выполняется в DB2 для локального запуска нашего веб-сайта на JBoss), и не может использовать на Hypersonic!

Если вы хотите повторно использовать ваш сценарий SQL, вы можете попробовать H2 с режимом совместимости DB2, , как предложено @ Arthur . Если это не работает, попробуйте JavaDB / Derby, который совместим с языком DB2 и может также использоваться "в памяти".

Но если сценарий огромен, боюсь, тесты будут довольно медленными. В этом случае использование DbUnit и меньшего набора данных может быть альтернативой. Взгляните на встроенные функции DBUnitSeamTest и Функциональное тестирование с помощью Seam, DBUnit и TestNG .

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

...