2016-11-19 3 views
0

Я кодирую crud API для моего приложения, построенного на Hibernate/SQL. Я использую mysql для тестирования и для живой среды.База данных для тестирования Junit

Для тестирования у меня есть база данных, пользователь и привилегии. Поэтому каждый раз, чтобы проверить, я должен выполнить следующие шаги:

  1. Удалить все таблицы из базы данных.
  2. Запустите «mvn clean install», а спящий режим ищет таблицу в db и создает их, если они не существуют.

Я хочу, чтобы мое тестирование таким образом, что оно не собирает мусор в моем mysql db, и мне не нужно отбрасывать таблицы каждый раз. Есть ли некоторые rdbms в памяти, которые могут быть использованы для этой цели, и как я могу выбрать между этим и mysql в зависимости от среды выполнения для тестирования или использования.

ответ

3

Я предпочитаю использовать H2, dbUnit и spring-test. Hsqldb и Derby - это другие базы данных в памяти, которые являются разумными. Тесты весной используют свой собственный отдельный контекст со своим собственным источником данных, конфигурация тестового контекста заменяет обычные значения контекста приложения. Таким образом, нет никаких дополнительных усилий, необходимых для переключения между базами данных, тесты могут быть настроены на использование H2, в то время как приложение использует mysql.

Помните, что mysql разрешает использование sql, которое он принимает, другие базы данных имеют тенденцию быть более строгими. Если вы используете native sql, который может стать препятствием для использования базы данных в памяти.

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

+0

У меня тоже есть те тесты DAO, но обычно они являются модульными тестами - просто проверяют доступ к базе данных - и я пропускаю эти каскады в «настоящую» базу данных, а не в память. Таким образом, они также проверяют метаданные таблицы, а не только код, к которому они обращаются. Но с проверками кода в других слоях, которые обращаются к DAO, вот когда я обычно закрываю или издеваюсь над ними, а не пропускаю их. –

+1

@Jim: спасибо, я отредактировал, поэтому я не ошибаюсь в ваших взглядах –

1

HSQLDB и H2 Я думаю, что это довольно распространенный выбор.

Лично я больше не спускаюсь по этому маршруту - я просто закрываю DAO с тестовыми двойниками при выполнении модульных тестов, чтобы они записывали или читали из списков в памяти или предоставляли для них макеты. Нет сложной технологии. Это означает, что фактическая настойчивость к БД не тестируется - если я чувствую, что мне это нужно, я обычно буду писать отдельные модульные тесты для самих DAO, чтобы специально подключиться к физической БД, и очистить все, что мне нужно, при срыве эти испытания.

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