2008-09-06 7 views
8

Я пытался осуществить модульного тестирования и в настоящее время имеют некоторый код, который выполняет следующие действия:JUnit для кода базы данных

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

мой блок стратегии тестирования заключается в следующем:

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

  1. в нАлАдкА(), загрузить некоторые данные в мое тестировании дб
  2. запустить свой код, используя мое тестирование БД в качестве источника
  3. инспектировать таблицу данных, проверки подсчетов и существование/отсутствие существования некоторые записи
  4. четкое тестирование БД, погрузка в другой набор данных
  5. выполнения кода снова
  6. инспектировать данные таблицы снова

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

Похоже, это немного громоздким и должно быть проще? какие-либо предложения?

ответ

8

Вы намерены проверить представление, которое генерирует дельта, или проверить правильность добавления, удаления и обновления кода в ответ на представление?

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

Если вы хотите проверить, как ваш код реагирует на различия, обнаруженные в представлении, я бы попытался абстрагироваться от доступа к базе данных. Я представляю java-метод, с помощью которого вы можете передать набор результатов (или список POJO/DTO) и возвращает список параметров массивов объектов (опять же, или POJO) для добавления. Другие методы будут анализировать список различий для элементов, которые необходимо удалить и обновить. Затем вы можете создать макет результирующего набора или pojo, передать их в свой код и проверить правильность параметров. Все, не касаясь базы данных.

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

6

DbUnit будет отвечать вашим потребностям. Единственное, на что нужно обратить внимание, это то, что они переключились на использование SLF4J в качестве своего фасада регистрации, а не JCL. Вы можете настроить SLF4J на пересылку журнала в JCL, но быть предупрежденным, если вы используете Maven DbUnit по умолчанию в своем поставщике журнала Nop, поэтому вам придется использовать исключение I blogged об этом конфликте в последнее время.

1

Я использую DbUnit, но также я очень много работаю, чтобы не тестировать его. Тестирование, которое идет против базы данных, должно существовать только для тестирования интерфейса базы данных. Итак, у меня есть Mock Db Connections, что я могу установить данные для использования во всех остальных моих тестах.

1

Если вы используете Maven, один из вариантов - использовать sql-maven-plugin. Он позволяет запускать сценарии инициализации базы данных/народонаселения во время цикла сборки maven.

1

Помимо уже предложенного DBUnit, вы можете посмотреть Unitils. Он использует DbUnit, но обеспечивает более, что (со ссылкой с сайта):

  • Автоматического ведение баз данных, с поддержкой инкрементальных, повторяемых и постом сценариев обработки
  • автоматически отключат ограничения и установленные последовательности в минимальное значение
  • Поддержка Oracle, HSQLDB, MySql, DB2, PostgreSQL, MSSQL и Дерби
  • Simplify тестовой базы данных настройки соединения
  • Простая вставка тестовых данных с DBUnit * Выполнение тестов в сделке
  • JPA создание диспетчера объектов и инъекции для спящего режима, TopLink и * создание Hibernate SessionFactory и сессия
  • Автоматически проверять отображение JPA сущностей/спящий режим сопоставляются объекты с базой данных
Смежные вопросы