2016-05-15 2 views
0

У меня есть приложение, указывающее на базу данных mysql.dbunit как синхронизировать реальную базу данных с тестовой базой данных

Я пытаюсь использовать DBUnit для настройки своих тестовых сред, что отлично работает.

Проблема в том, что при настройке DBUnit я указал его в СУБД MySQL. Поэтому, когда DBUnit выполняется, он принимает указанный файл dataset.xml и переопределяет информацию из моей исходной базы данных. что имеет смысл, потому что там, где я указываю это.

Вопрос в том, должен ли я создать новую базу данных только для тестов, чтобы мой DBUnit мог указать на нее? Если да, то как мне управлять синхронизацией структуры между моей исходной базой данных и темой для тестов?

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

ответ

1

AM Я должен создать новую базу данных только для тестов, чтобы мой DBUnit мог указать на нее?

Это лучший подход, так как он устраняет множество проблем.

Как я могу управлять синхронизацией структуры между моей исходной базой данных и данными для тестов?

Вы не упомянули техник в своем стеке стойкости, например, Hibernate, Spring/Spring Boot/Spring Data/Flyway/LiquiBase/etc. чтобы предложить больше о том, как это реализовать. В общем, запустите DDL в схеме при запуске тестов (либо из управляемого DDL, либо из-за чего-то вроде Flyway или автогенерации из Hibernate).

Кроме того, мой предпочтительный и типичный подход к тестированию является с:

  1. в оперативной памяти/встроенная база данных для ее скорости, такие как Apache Derby, автоматически запускается только перед запуском тестов.
  2. Создание таблиц в схеме с использованием Hibernate DDL gen из аннотированных объектов.
  3. Нет существующих строк в любых таблицах; происходит автоматически со встроенной базой данных и чистой сборкой при хранении любого из своих файлов в подкаталоге выходного каталога сборки.
  4. dbUnit настроен с использованием DatabaseOperation.CLEAN_INSERT [0].
  5. Минимальные данные dbUnit для каждого теста.
+0

Отличный ответ спасибо! Да, я использую hibernate-entitymanager, и, допустим, я использую Liquibase для управления базой данных mysql. Итак, вопрос, который приходит мне на ум: «Безопасно» использовать Hibernate DDL gen для создания схемы и ее таблиц для базы данных в памяти? или я должен найти способ использовать одну и ту же жидкость для обеих баз данных? –

+0

Если команда правильно управляет сущностями, то, вероятно, очень «безопасно» использовать Hibernate DDL gen. Однако, если сущности не имеют всех необходимых аннотаций, тогда ваш лучший выбор - это конфигурация LiquiBase. Поскольку команда прилагает усилия, чтобы написать файлы LiquiBase, а LiquiBase имеет «основное определение» (и используется для производства), я бы использовал его вместо Hibernate DDL gen. Таким образом, тесты используют ту же конфигурацию, что и среды dev/test/prod. Это очень полезно и важно. – Jeff

+0

Джефф, у меня есть еще одно сомнение. Мои DAO используют соединение, указанное в моем файле persistence.xml (to mysql) ...и мой dbunit использует связь, указанную в PropertyBasedJdbcDatabaseTester (до hsql) ... Поэтому, когда я запускаю тесты, DAO не указывают на мою базу данных в памяти. Не могли бы вы помочь мне решить этот вопрос? –