Простая и надежная база данных памяти для быстрых тестов интеграции Java с поддержкой JPA
Мои тесты интеграции выполнялись бы намного быстрее, если бы я использовал базу данных в памяти вместо PostgreSQL. Я использую JPA (Hibernate), и мне нужна база данных в базе данных, которая будет легко переключиться на использование JPA, простую в настройке и надежную. Он должен поддерживать JPA и Hibernate (или наоборот, если хотите) довольно широко, поскольку у меня нет желания использовать мой код доступа к данным для тестов.
Какая база данных является наилучшим выбором, указанным выше?
Ответы
Ответ 1
Для тестирования интеграции теперь я использую H2 (от оригинального автора HSQLDB), который я предпочитаю над HSQLDB. Это быстрее (и я хочу, чтобы мои тесты были как можно быстрее), у него есть некоторые приятные функции, такие как compatibility, команда разработчиков очень отзывчива (в то время как HSQLDB оставался бездействующим в течение многих лет до недавнего времени).
Ответ 2
Я использовал HSQLDB в памяти для тестирования интеграции JPA/Hibernate на Java. Начинается довольно быстро, не требует специальной настройки.
Единственная проблема, которую я видел до сих пор с использованием HSQLDB с Hibernate, заключалась в том, что размер пакета должен быть установлен в 0, но это может быть связано только со старой версией. У меня будет копать и посмотреть, смогу ли я найти детали этой проблемы.
Derby поддерживает режим памяти в настоящее время, он больше не помечен экспериментальным.
Ответ 3
Я использую Derby. С одной стороны, это примерно 3 строки кода на unit test, так как нет необходимости в завершении работы после теста. Однако вам нужно использовать реализацию JPA, которая может отбрасывать и создавать таблицы, такие как EclipseLink.
Derby также может инициализировать новую базу данных в памяти из файла, чтобы вы могли иметь справочную базу данных и вернуться к ней в любое время.
Тем не менее, для модульного тестирования я предпочитаю создавать свои объекты в моей логике unit test @Before. Мне легче, особенно с JPA, так как это позволяет мне гибко выполнять рефакторинг и не беспокоиться о базовой структуре базы данных, другой такие инструменты, как DBunit, полагаются на практически статическую структуру, а рефакторинг подразумевает изменение XML файлов DBunit вручную, а не полагаться на возможности рефакторинга Eclipse.