Создание структуры базы данных в памяти из экземпляра Oracle

У меня есть приложение, в котором многие «модульные» тесты используют реальное соединение с базой данных Oracle во время их выполнение.

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

Итак, мой Идея состоит в том, чтобы постепенно заменить этот тестовый экземпляр Oracle базой данных в памяти. Я буду использовать hsqldb или, может быть, лучше h2 .

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

Конечно, я могу извлечь структуру базы данных из Oracle, используя некоторые инструменты, такие как SQL Developer или TOAD , а затем модифицировать эти сценарии, чтобы адаптировать их к языку hsqldb или h2 . Но я не думаю, что это лучший подход.


Фактически, я уже сделал это в другом проекте, используя hsqldb , но я написал вручную все сценарии для создания таблиц. К счастью, мне нужно было создать всего несколько таблиц. Моя основная проблема на этом этапе заключалась в том, чтобы «перевести» - Некоторые «базовые» юнит-тесты, не имеющие отношения к БД. - Для тестирования DAO я использовал hsqldb для выполнения манипуляций с базой данных, таких как CRUD. - Затем на уровне сервиса я использовал Mockito для имитации моих объектов DAO, чтобы сосредоточиться на тесте сервиса, а не на всех приложениях (т.е. сервис + dao + DB).

В текущем приложении мы имеем наихудший сценарий: для тестирования уровня DAO требуется соединение с Oracle. Уровень сервисов не использует (пока) какие-либо фиктивные объекты для имитации DAO. Таким образом, тесты служб также нуждаются в соединении с Oracle.

Я знаю, что имитаторы и база данных в памяти - это две отдельные точки, и я обращусь к ним как можно скорее. Однако мой первый шаг - попытаться удалить соединение Oracle с помощью базы данных в памяти, а затем я воспользуюсь своими знаниями Mockito для улучшения тестов.

Обратите внимание, что Я также хочу отделить модульные тесты от интеграционных. Последнему потребуется доступ к базе данных Oracle для выполнения «реальных» тестов, но меня больше всего беспокоит (и это цель этого вопроса), что почти все мои модульные тесты сегодня не запускаются изолированно.

32
задан Romain Linsolas 24 September 2010 в 07:29
поделиться