java - 运行集成测试时嵌入 MongoDB

我的问题是 this one 的变体.

由于我的 Java Web 应用程序项目需要大量读取过滤器/查询以及与 GridFS 等工具的接口(interface),因此我正在努力想出一种按照上述解决方案建议的方式使用 MongoDB 的合理方法。

因此,我正在考虑在集成测试的同时运行一个嵌入式 MongoDB 实例。我希望它自动启动(对于每个测试或整个套件),刷新数据库对于每个测试,然后关闭 最后。这些测试可能会在开发机器和 CI 服务器上运行,所以我的解决方案也需要便携

任何对 MongoDB 有更多了解的人都可以帮助我了解这种方法的可行性,和/或推荐任何可以帮助我入门的阅读 Material 吗?

我也愿意接受人们可能提出的关于我如何解决这个问题的其他建议...

最佳答案

我找到了Embedded MongoDB看起来很有前途的图书馆,可以满足您的要求。

当前支持 MongoDB 版本:1.6.53.1.6,前提是二进制文件仍可从配置的镜像中获得。

这是一个简短的使用示例,我刚刚尝试过,效果很好:

public class EmbeddedMongoTest {
    private static final String DATABASE_NAME = "embedded";

    private MongodExecutable mongodExe;
    private MongodProcess mongod;
    private Mongo mongo;

    @Before
    public void beforeEach() throws Exception {
        MongoDBRuntime runtime = MongoDBRuntime.getDefaultInstance();
        mongodExe = runtime.prepare(new MongodConfig(Version.V2_3_0, 12345, Network.localhostIsIPv6()));
        mongod = mongodExe.start();
        mongo = new Mongo("localhost", 12345);
    }

    @After
    public void afterEach() throws Exception {
        if (this.mongod != null) {
            this.mongod.stop();
            this.mongodExe.stop();
        }
    }

    @Test
    public void shouldCreateNewObjectInEmbeddedMongoDb() {
        // given
        DB db = mongo.getDB(DATABASE_NAME);
        DBCollection col = db.createCollection("testCollection", new BasicDBObject());

        // when
        col.save(new BasicDBObject("testDoc", new Date()));

        // then
        assertThat(col.getCount(), Matchers.is(1L));
    }
}

https://stackoverflow.com/questions/6437226/

相关文章:

node.js - 如何使用 2d 地理索引在 Mongoose 模式中正确定义数组中的对象

javascript - mongoose vs mongodb(nodejs模块/扩展),哪个更好

node.js - 如何在 MongoDB 中按日期对集合进行排序?

mongodb - mongorestore 错误 : Don't know what to do

mongodb - Mongoose -- 强制集合名称

node.js - 如何使用 Mongoose 生成 ObjectId?

node.js - Mongoose (mongodb)批量插入?

javascript - Mongoose 子文档与嵌套模式

node.js - MongoDB 和 Mongoose 的区别

mongodb - 使用 MongoDB 检查字段是否存在