Mi pregunta es una variación de esta .
Dado que mi proyecto de aplicación web Java requiere muchos filtros de lectura / consultas e interfaces con herramientas como GridFS, estoy luchando por pensar en una forma sensata de emplear MongoDB de la manera que sugiere la solución anterior.
Por lo tanto, estoy considerando ejecutar una instancia incrustada de MongoDB junto con mis pruebas de integración. Me gustaría que se inicie automáticamente (ya sea para cada prueba o para toda la suite), vacíe la base de datos para cada prueba y se apague al final. Estas pruebas pueden ejecutarse en máquinas de desarrollo, así como en el servidor CI, por lo que mi solución también deberá ser portátil .
¿Alguien con más conocimiento sobre MongoDB puede ayudarme a tener una idea de la viabilidad de este enfoque y / o tal vez sugerir algún material de lectura que pueda ayudarme a comenzar?
También estoy abierto a otras sugerencias que la gente pueda tener sobre cómo podría abordar este problema ...
fuente
Respuestas:
Aquí hay una versión actualizada (para 2019) de la respuesta aceptada de @rozky (se ha cambiado mucho en las bibliotecas Mongo y Embedded MongoDB).
fuente
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
junto con el cambio anteriorEncontré la biblioteca Embedded MongoDB que parece bastante prometedora y hace lo que ha pedido.
Actualmente es compatible con las versiones de MongoDB:
1.6.5
a3.1.6
, siempre que los binarios todavía estén disponibles en el espejo configurado.Aquí hay un breve ejemplo de uso, que acabo de probar y funciona perfectamente:
fuente
com.mongodb
API oficial de Java, por lo que no es más complicado que usar la API normal.Hay un producto de Foursquare Fongo . Fongo es una implementación java en memoria de mongo. Intercepta llamadas al controlador estándar mongo-java para buscar, actualizar, insertar, eliminar y otros métodos. El uso principal es para pruebas unitarias ligeras en las que no desea iniciar un proceso mongo.
fuente
Si está utilizando Maven, puede estar interesado en un complemento que he creado que envuelve la API flapdoodle.de 'embedded mongo' :
embedmongo-maven-plugin
Proporciona un
start
objetivo que puede utilizar para iniciar cualquier versión de MongoDB que desee (por ejemplo, durantepre-integration-test
) y unstop
objetivo que detendrá MongoDB (por ejemplo, durantepost-integration-test
).El beneficio real de usar este complemento sobre otros es que no es necesario instalar MongoDB de antemano. Los binarios de MongoDB se descargan y almacenan
~/.embedmongo
para futuras compilaciones.fuente
Si está utilizando sbt y specs2, escribí el mismo tipo de contenedor para embedmongo
https://github.com/athieriot/specs2-embedmongo
fuente
con spring-boot 1.3 puede usar EmbeddedMongoAutoConfiguration
pom.xml
MongoConfig
fuente
Puede ejecutar MongoDB en memoria a partir de la versión 3.2.6. Desde el sitio :
fuente
No solo para pruebas unitarias, sino que también explicó cómo usar inmemory mongodb con rest api.
dependencia de maven:
================================================ ===========================
application.properties
================================================ ===========================
UserRepository.java
UserRepository de interfaz pública extiende MongoRepository {
}
para referencia y todo el código Java, use el siguiente enlace: (explicación paso a paso)
https://www.youtube.com/watch?v=2Tq2Q7EzhSA&t=7s
fuente
Las actuaciones son mejores cuando se ejecuta
mongod
constorageEngine='ephemeralForTest'
fuente
En producción, utilizará una base de datos real.
Si desea que sus pruebas reflejen cómo se comporta su producto en producción, use una instancia real de Mongo.
Es posible que una implementación falsa no se comporte exactamente igual que una real. Al realizar la prueba, debe esforzarse por lograr la corrección. La velocidad de ejecución ocupa el segundo lugar.
fuente