Мой вопрос - это вариант этого .
Поскольку мой проект веб-приложения Java требует множества фильтров / запросов чтения и интерфейсов с такими инструментами, как GridFS, я изо всех сил пытаюсь придумать разумный способ использования MongoDB так, как предлагает это решение.
Поэтому я рассматриваю возможность запуска встроенного экземпляра MongoDB вместе с моими интеграционными тестами. Я бы хотел, чтобы он запускался автоматически (либо для каждого теста, либо для всего набора), очищал базу данных для каждого теста и выключался в конце. Эти тесты могут выполняться на машинах разработки, а также на сервере CI, поэтому мое решение также должно быть переносимым .
Может ли кто-нибудь с дополнительными знаниями о MongoDB помочь мне понять осуществимость этого подхода и / или, возможно, предложить какие-либо материалы для чтения, которые могут помочь мне начать работу?
Я также открыт для других предложений о том, как я могу подойти к этой проблеме ...
источник
Ответы:
Вот обновленная (на 2019 год) версия принятого ответа от @rozky (многое было изменено как в библиотеках Mongo, так и в Embedded MongoDB).
источник
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
вместе с указанным выше изменениемЯ нашел встроенную библиотеку MongoDB, которая выглядит многообещающей и делает то, о чем вы просили.
В настоящее время поддерживает версии MongoDB:
1.6.5
до3.1.6
, при условии, что двоичные файлы по-прежнему доступны с настроенного зеркала.Вот небольшой пример использования, который я только что попробовал, и он отлично работает:
источник
com.mongodb
Java API, поэтому это не сложнее, чем использование обычного API.Есть продукт Foursquare Fongo . Fongo - это java-реализация mongo в памяти. Он перехватывает вызовы стандартного mongo-java-драйвера для поиска, обновления, вставки, удаления и других методов. В основном используется для облегченного модульного тестирования, когда вы не хотите раскручивать монго-процесс.
источник
Если вы используете Maven, вас может заинтересовать созданный мной плагин, который обертывает встроенный mongo API flapdoodle.de :
встроенный плагин mongo-maven
Он обеспечивает
start
цель, которую вы можете использовать для запуска любой версии MongoDB, которую хотите (например, во времяpre-integration-test
), иstop
цель, которая остановит MongoDB (например, во времяpost-integration-test
).Настоящее преимущество использования этого плагина по сравнению с другими заключается в том, что MongoDB не требуется предварительно устанавливать. Бинарные файлы MongoDB загружаются и сохраняются
~/.embedmongo
для будущих сборок.источник
Если вы используете sbt и specs2, я написал такую же оболочку для embedmongo
https://github.com/athieriot/specs2-embedmongo
источник
с Spring-boot 1.3 вы можете использовать EmbeddedMongoAutoConfiguration
pom.xml
MongoConfig
источник
Начиная с версии 3.2.6, MongoDB можно запускать в памяти. С сайта :
источник
Не только для модульного тестирования, но также объяснил, как использовать inmemory mongodb с rest api.
зависимость maven:
================================================== ===========================
application.properties
================================================== ===========================
UserRepository.java
открытый интерфейс UserRepository расширяет MongoRepository {
}
для справки и всего кода Java используйте ссылку ниже: (пошаговое объяснение)
https://www.youtube.com/watch?v=2Tq2Q7EzhSA&t=7s
источник
Выступления лучше, если исполнять
mongod
сstorageEngine='ephemeralForTest'
источник
В производстве вы будете использовать настоящую базу данных.
Если вы хотите, чтобы ваши тесты отражали поведение вашего продукта в производственной среде, используйте реальный экземпляр Mongo.
Поддельная реализация может не вести себя точно так же, как настоящая. При тестировании следует стремиться к корректности. На втором месте - скорость исполнения.
источник