17

我必须使用 MongoDB 存储实现 Python 代码的鼻子测试。是否有任何允许我初始化模拟内存 MongoDB 服务器的 python 库?

我正在使用持续集成。所以,我希望我的测试独立于任何运行 MongoDB 的服务器。有没有办法在内存中模拟 mongoDM 服务器以独立于连接到 Mongo 服务器来测试代码?

提前致谢!

4

4 回答 4

14

您可以尝试:https ://github.com/vmalloc/mongomock ,它旨在成为一个小型库,用于模拟 pymongo 集合对象以进行测试。

但是,与确保某些模拟库功能完整相比,我不确定仅运行 mongodb 的成本是否过高。

于 2013-04-15T14:00:03.887 回答
4

我不了解 Python,但我对 C# 也有类似的担忧。我决定在我的工作站上运行一个真实的 Mongo 实例,指向一个空目录。这不是很好,因为代码不是孤立的,但它又快又容易。

只有数据访问层在测试过程中真正调用了 Mongo。其余的可以依赖于数据访问层的模拟。当我真的想验证与 Mongo 的交互是否正确时,我不觉得伪装 Mongo 值得付出努力。

于 2013-04-10T02:10:05.553 回答
2

您可以使用具有内存中 mongo db pymongo 连接替换的 Ming

import ming
mg = ming.create_datastore('mim://')
mg.conn # is the connection
mg.db # is a db with no name
mg.conn.somedb.somecol
# >> mim.Collection(mim.Database(somedb), somecol)
col = mg.conn.somedb.somecol
col.insert({'a': 1})
# >> ObjectId('5216ac3fe0323a1218f4e9aa')
col.find().count()
# >> 1
于 2013-08-23T00:28:15.717 回答
1

我也在使用pymongo并且MockupDB对于我的目的(集成测试)运行良好。

使用它很简单:

from mockupdb import *
server = MockupDB()
port = server.run()
from pymongo import MongoClient
client = MongoClient(server.uri)
import module_i_want_to_patch
module_i_want_to_patch.client = client

您可以在此处查看 MockupDB 的官方教程

于 2019-05-21T19:38:03.243 回答