2016-06-03 1 views
5

У меня есть приложение, для которого база данных prod/test/qa - это только Oracle. Кроме того, я подозреваю, что SQL-запросы являются специфичными для Oracle. И, к сожалению, это приложение имеет второе место без модульных тестов.Как использовать Oracle как встроенную базу данных для запуска модульных тестов в maven?

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

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

Из-за моей недостаточной уверенности в уровне стандартизации этого приложения, я бы предпочел запустить тесты в базе данных Oracle. Как следствие, я хотел бы запустить базу данных оракула, когда начнутся мои тесты, заполнить ее некоторым тестовым datan и остановить его на конце теста. Как я могу это сделать в контексте maven?

+2

Подсказка: быть точным относительно формулировки. Я думаю, что подавляющее большинство ИТ-специалистов не рассматривали бы тест, требующий работы базы данных ..., чтобы быть ** unit ** test. Лучше назвать это функциональным или интеграционным тестом; просто для того, чтобы предотвратить заблуждения для окружающих. Тест True ** unit ** выполняется во время компиляции; им нужны только ваши скомпилированные классы и JUnit - не какая-то встроенная база данных, файловая система, веб-сервис, сокет, ... – GhostCat

ответ

1

Я понимаю, что вы хотите Oracle, но вы также можете попробовать с h2 использованием режима оракула флаг

jdbc:h2:~/test;MODE=Oracle 

У меня такая же необходимость в большинстве моих проектов, и это ближе всего к Oracle я нашел. Вы можете определить псевдонимы за несколько недостающих функций.

+0

Как вы относитесь к «dense_rank»? – Stephan

+0

Я не думаю, что это можно сделать, поскольку dense_rank не соответствует стандартным форматам SQL (то есть: DENSE_RANK() OVER (PARTITION BY ...)): https://groups.google.com/forum/#! тема/h2-базы данных/OJkQaoWFHeM – alexbt

2

Вы можете использовать exec-maven-plugin для запуска любого приложения в течение жизненного цикла Maven, включая полный экземпляр Oracle. Тем не менее, вам все равно необходимо установить его на строитель и т. Д., Что усложняет решение совсем немного.

Так что мы сделали в другом проекте:

  1. Define уникальное имя сборки как Maven собственности (по умолчанию имя пользователя для локального строит, пусть CI обеспечить это с помощью -D, например, на бамбука вы можете включить построение ключа плана и номер)
  2. подключиться к общему примеру Oracle на нашей инфраструктуре
  3. создать новую схему, основанную на определенном имени сборки
  4. Update новой пустая схема с DDL (мы используем в производстве Flyway, так что часть легко)
  5. интеграционные тесты Run
  6. схема падения в пост-интеграционного этапа тестирования (с сборки может быть остановлен вручную или повесить, он по-прежнему необходимо иметь какой-то автоматической DB очистки для устаревших схем)

Вы можете использовать sql-maven-plugin для выполнения SQL-скриптов. Или flyway-maven-plugin при использовании пролета.

Смежные вопросы