Ma question est une variante de celle-ci .
Étant donné que mon projet d'application Web Java nécessite beaucoup de filtres / requêtes de lecture et d'interfaces avec des outils tels que GridFS, j'ai du mal à trouver un moyen judicieux d'utiliser MongoDB de la manière suggérée par la solution ci-dessus.
Par conséquent, j'envisage d'exécuter une instance intégrée de MongoDB parallèlement à mes tests d'intégration. J'aimerais qu'il démarre automatiquement (soit pour chaque test, soit pour toute la suite), vider la base de données pour chaque test et s'arrêter à la fin. Ces tests peuvent être exécutés sur des machines de développement ainsi que sur le serveur CI, donc ma solution devra également être portable .
Quelqu'un avec plus de connaissances sur MongoDB peut-il m'aider à avoir une idée de la faisabilité de cette approche, et / ou peut-être suggérer un matériel de lecture qui pourrait m'aider à démarrer?
Je suis également ouvert à d'autres suggestions que les gens pourraient avoir sur la façon dont je pourrais aborder ce problème ...
la source
Réponses:
Voici une version mise à jour (pour 2019) de la réponse acceptée de @rozky (beaucoup de choses ont été modifiées dans les bibliothèques Mongo et Embedded MongoDB).
la source
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
avec le changement ciJ'ai trouvé la bibliothèque Embedded MongoDB qui semble assez prometteuse et fait ce que vous avez demandé.
Prend actuellement en charge les versions MongoDB:
1.6.5
to3.1.6
, à condition que les binaires soient toujours disponibles à partir du miroir configuré.Voici un petit exemple d'utilisation, que je viens d'essayer et qui fonctionne parfaitement:
la source
com.mongodb
API Java officielle , ce n'est donc pas plus compliqué que d'utiliser l'API standard.Il existe un produit Foursquare Fongo . Fongo est une implémentation java en mémoire de mongo. Il intercepte les appels au pilote standard mongo-java pour les recherches, les mises à jour, les inserts, les suppressions et d'autres méthodes. L'utilisation principale est pour les tests unitaires légers où vous ne voulez pas lancer un processus mongo.
la source
Si vous utilisez Maven, vous serez peut-être intéressé par un plugin que j'ai créé qui encapsule l' API `` mongo embarquée '' de flapdoodle.de :
embedmongo-maven-plugin
Il fournit un
start
objectif que vous pouvez utiliser pour démarrer n'importe quelle version de MongoDB que vous voulez (par exemple pendantpre-integration-test
), et unstop
objectif qui arrêtera MongoDB (par exemple pendantpost-integration-test
).Le véritable avantage de l'utilisation de ce plugin par rapport aux autres est qu'il n'est pas nécessaire d'installer MongoDB au préalable. Les binaires MongoDB sont téléchargés et stockés
~/.embedmongo
pour les futures versions.la source
Si vous utilisez sbt et specs2, j'ai écrit le même type de wrapper pour embedmongo
https://github.com/athieriot/specs2-embedmongo
la source
avec spring-boot 1.3, vous pouvez utiliser EmbeddedMongoAutoConfiguration
pom.xml
MongoConfig
la source
Vous pouvez exécuter MongoDB en mémoire à partir de la version 3.2.6. Depuis le site :
la source
Pas seulement pour les tests unitaires, mais a également expliqué comment utiliser mongodb en mémoire avec l'api de repos.
dépendance maven:
=================================================== ============================
application.properties
=================================================== ============================
UserRepository.java
interface publique UserRepository étend MongoRepository {
}
pour référence et tout le code java, utilisez le lien ci-dessous: (explication étape par étape)
https://www.youtube.com/watch?v=2Tq2Q7EzhSA&t=7s
la source
Les performances sont meilleures lors de l'exécution
mongod
avecstorageEngine='ephemeralForTest'
la source
En production, vous utiliserez une vraie base de données.
Si vous souhaitez que vos tests reflètent le comportement de votre produit en production, utilisez une instance réelle de Mongo.
Une fausse implémentation peut ne pas se comporter exactement comme une vraie. Lors du test, vous devez vous efforcer d'obtenir l'exactitude. La vitesse d'exécution vient en second.
la source