Moje pytanie jest odmianą tego .
Ponieważ mój projekt aplikacji internetowej Java wymaga wielu filtrów / zapytań odczytu i interfejsów z narzędziami takimi jak GridFS, staram się wymyślić rozsądny sposób wykorzystania MongoDB w sposób sugerowany przez powyższe rozwiązanie.
Dlatego rozważam uruchomienie osadzonej instancji MongoDB wraz z moimi testami integracji. Chciałbym, aby uruchamiał się automatycznie (dla każdego testu lub całego zestawu), opróżniał bazę danych dla każdego testu i wyłączał się na końcu. Te testy mogą być uruchamiane na maszynach programistycznych, a także na serwerze CI, więc moje rozwiązanie również musi być przenośne .
Czy ktoś, kto ma większą wiedzę na temat MongoDB, może mi pomóc zorientować się w wykonalności tego podejścia i / lub może zasugerować materiały do czytania, które mogą mi pomóc w rozpoczęciu?
Jestem również otwarty na inne sugestie, które ludzie mogą mieć, jak rozwiązać ten problem ...
źródło
Odpowiedzi:
Oto zaktualizowana (na rok 2019) wersja zaakceptowanej odpowiedzi od @rozky (wiele się zmieniło w bibliotekach Mongo i Embedded MongoDB).
źródło
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
do powyższej zmianyZnalazłem wbudowaną bazę danych MongoDB bibliotekę która wygląda całkiem obiecująco i robi to, o co prosiłeś.
Obecnie obsługuje wersje MongoDB:
1.6.5
do3.1.6
, pod warunkiem, że pliki binarne są nadal dostępne ze skonfigurowanego serwera lustrzanego.Oto krótki przykład użycia, który właśnie wypróbowałem i działa idealnie:
źródło
com.mongodb
interfejsu API języka Java, więc nie jest to bardziej skomplikowane niż użycie zwykłego interfejsu API.Jest produkt Foursquare Fongo . Fongo to implementacja mongo w języku Java w pamięci. Przechwytuje wywołania standardowego sterownika mongo-java w celu znalezienia, aktualizacji, wstawienia, usunięcia i innych metod. Głównym zastosowaniem jest lekkie testowanie jednostkowe, w którym nie chcesz przyspieszać procesu mongo.
źródło
Jeśli używasz Mavena, możesz być zainteresowany wtyczką, którą stworzyłem, która otacza API 'embedded mongo' flapdoodle.de :
embedmongo-maven-plugin
Zapewnia
start
cel, którego możesz użyć do uruchomienia dowolnej wersji MongoDB (np. W trakciepre-integration-test
) orazstop
cel, który zatrzyma MongoDB (np. W trakciepost-integration-test
).Prawdziwą zaletą korzystania z tej wtyczki w porównaniu z innymi jest to, że nie ma potrzeby wcześniejszej instalacji MongoDB. Pliki binarne MongoDB są pobierane i przechowywane na
~/.embedmongo
potrzeby przyszłych kompilacji.źródło
Jeśli używasz sbt i specs2, napisałem ten sam rodzaj opakowania dla embedmongo
https://github.com/athieriot/specs2-embedmongo
źródło
dzięki spring-boot 1.3 możesz użyć EmbeddedMongoAutoConfiguration
pom.xml
MongoConfig
źródło
Możesz uruchomić MongoDB w pamięci od wersji 3.2.6. Ze strony :
źródło
Nie tylko do testowania jednostkowego, ale także wyjaśnił, jak używać inmemory mongodb z resztą api.
zależność maven:
==================================================== ===========================
application.properties
==================================================== ===========================
UserRepository.java
publiczny interfejs UserRepository rozszerza MongoRepository {
}
w celach informacyjnych, a cały kod java użyj poniższego linku: (wyjaśnienie krok po kroku)
https://www.youtube.com/watch?v=2Tq2Q7EzhSA&t=7s
źródło
Wydajność jest lepsza podczas wykonywania
mongod
zstorageEngine='ephemeralForTest'
źródło
W produkcji będziesz korzystać z prawdziwej bazy danych.
Jeśli chcesz, aby Twoje testy odzwierciedlały zachowanie Twojego produktu podczas produkcji, użyj prawdziwej instancji Mongo.
Fałszywa implementacja może nie zachowywać się dokładnie tak samo, jak prawdziwa. Podczas testowania powinieneś dążyć do poprawności. Szybkość wykonania jest na drugim miejscu.
źródło