欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Junit中利用Embedded Mongo(Fongo)

程序员文章站 2022-04-16 14:29:22
...
一、MongoDB 是一个基于分布式文件存储的NoSQL数据库,在应用开发中使用非常普遍,因为mongo是由 C++ 语言编写,真实的mongodb只能以server模式独立运行,这样就使得基于mongo应用的junit无法真正的独立运行,除非我们将所有mongo相关的操作都mock,本文将介绍一种为了针对mongo应用的junit而独立开发的内存库fakemongo,简称fongo,官网地址 fongo
  在spring boot的官方文档中,Embedded Mongo采用的是de.flapdoodle.embed:de.flapdoodle.embed.mongo,地址embed.mongo。其实现方式是在应用程序启动时,根据具体依赖的de.flapdoodle.embed.mongo版本,以及操作系统的版本,从mongo官方下载网站上下载相应的mongo版本,并启动,在应用程序结束时停止mongo并清除数据。因为我们的开发环境不能连上互联网,想采用这个方式必须把不同平台的mongo都下载好,放到我们的局域网,还必须在局域网里面搭建一个http服务,并重写flapdoodle.embed.mongo默认的下载地址,比较麻烦,并且我们应用只是使用了mongo基本的存储查询功能,不依赖于MapReduce等高级特性,经过对比我们采用了fongo作为我们junit时使用的mongo库。
  fakemongo目的就是为了简化mongo应用的junit,使用java完全重写,因而可以真正的运行于内存中。具体示例参考 nosqlunit-mongo

2019-8-8
采用Fakemongo时,支持的版本是spring boot2.0.2.release,对应的mongo版本是3.6.3,后来把spring boot升级到2.1.5.release,对应的版本是mongo-java-driver-3.8.2.jar,执行时报错 java.lang.NoClassDefFoundError: com/mongodb/OperationExecutor,并且从fakemongo的github更新来看,这个项目已经没有人维护更新了。所以转换成了mongo-java-server,对新版本也能支持了mongo-java-server