Интеграционные тесты с MongoDB?

Мне нужно сделать несколько интеграционных тестов на базе данных Mongo с использованием Java, и я искал решение, подобное DbUnit (DbUnit для Hibernate), которое может заполнить мою базу данных пользовательскими данными и сбрасывать состояние после каждого запуска.

Какие-нибудь советы?

Спасибо

5 ответов

Решение

Для начала, я не знаю ни одного прямого эквивалента DBUnit для Mongo. Mongo по-прежнему является новым продуктом, поэтому вам, вероятно, придется "покататься" для некоторых из этих вещей.

Тем не менее, есть несколько особенностей Mongo, которые должны сделать это легко:

  1. Работает с минимальными разрешениями
  2. Может просто "запускаться" на подготовленных файлах
  3. На самом деле нет схемы (кроме индексов)
  4. Это может работать с данными JSON

Основываясь на вашем наборе данных, есть много способов сделать это. Но основные инструменты есть.

  • Вы должны иметь возможность запустить версию специально для вашего теста, из вашего теста.
  • Вы должны иметь возможность импортировать данные о состоянии из файла JSON.
  • Вы должны иметь возможность применять любые функции на стороне сервера из файла JS (с нуля).

Так что все должно быть довольно просто. Хотя вам придется написать большую часть кода.

Вот что я делаю: подключаюсь к известному (часто общедоступному) экземпляру mongo, но создаю новую уникальную базу данных для каждого запуска теста, используя UUID. Вам не нужно беспокоиться о создании коллекций, поскольку они создаются лениво при первом хранении в них документов. Создайте любые нужные вам индексы в конструкторе хранилища или DAO; Создание индекса Монго завершается успешно, не выполняя никакой работы, если индекс уже существует. Очевидно, вам не нужно беспокоиться о миграции схемы;-)

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

Когда тест завершен, удалите всю базу данных на этапе разборки.

На этот вопрос здесь дан ответ, и он позволяет запускать и останавливать экземпляр между каждым тестом: /questions/24641104/vstroennyij-mongodb-pri-zapuske-integratsionnyih-testov/24641119#24641119

Но запуск / остановка между каждым тестом, кажется, замедляет интеграционные тесты, и поэтому вам лучше запустить / остановить его для всего набора тестов: /questions/22148478/integratsionnyie-testyi-s-embedded-mongo-ili-ustanovlennyim-ekzemplyarom/22148493#22148493

Я знаю, что этот вопрос старый, но, возможно, мой ответ кому-нибудь пригодится. Вот простая утилита, которую я написал недавно: https://github.com/kirilldev/mongomery

Очень просто заполнить базу данных данными из файла json:

//db here is a com.mongodb.DB instance
MongoDBTester mongoDBTester = new MongoDBTester(db);
mongoDBTester.setDBState("predefinedTestData.json");

Чтобы проверить состояние БД:

mongoDBTester.assertDBStateEquals("expectedTestData.json");

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

Вы можете использовать nosql-модуль с модулем MongoDB

Другие вопросы по тегам