vendredi 17 mai 2013

Embedded MongoDB in Scala !


La première fois que j'ai du utiliser une base mongoDB c'était pour stocker les objets métier de l'application OneCalendar, une application écrite en Scala avec playframework 2.

A cette époque (début 2012), on m'avait assuré qu'il était impossible de démarrer une base mongoDB via un test et que si je voulais tester je devais installer une base MongoBD sur mon poste de dev et le démarrer avant.
Je trouvais ça vraiment dégeu mais ne connaissant pas du tout l'écosystème mongo je me suis exécuté.

Depuis lors, j'ai trouvé un super projet JAVA qui permet d'utiliser une base mongoDB embarquée pour ses tests et je me suis amusé à écrire un petit utilitaire pour le porter sur SCALA.

C'est hyper simple, il suffit de récupérer une dépendance "maven com.github.simplyscala" %% "scalatest-embedmongo" % "0.2.1" et d'utiliser une api accessible via l'extension d'un trait com.github.simplyscala.MongoEmbedDatabase

La version ou encore le port de connexion à la base sont configurables, et après la librairie s'occupe seule de télécharger la base dont vous avez besoin pour vos tests. Tout est automatique c'est très puissant ! (juste un peu long la première fois que vous téléchargez la base).







MyTest extends FunSuite with MongoEmbedDatabase with BeforeAndAfterAll {

   var mongoProps: MongodProps = null
   override def beforeAll() { mongoProps = mongoStart(12345, Version.2.3.0) }                                       
   override def afterAll() { mongoStop(mongoProps) }

   test("some test with mongo") {
            ...
   }

Pour plus de détail je vous renvoie vers la page github du projet qui contient un README assez détaillé.

A noter que la même chose est possible en JAVA puisque scalatest-embedmongo n'est qu'un wrapper du projet Java embedmongo.flapdoodle.de.

N.B : Un mode mutable et un mode immuable sont proposé dans l'utilisation de la lib Scala. Il est à noter que pour l'instant (version 0.2.1) la version immuable connaît quelque soucis quand votre nombre de tests est très importants (que vous créez et supprimer de nombreuse fois des base mongo embarquée).

N.B 2 : c'est un projet libre donc vos retours, bugs trouvés, idées de features et éventuelles pull-request sont les bienvenues (attention je n'accepte que du code testé ! :D )

Aucun commentaire:

Enregistrer un commentaire