首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于python单元测试的模拟mongoDB

用于python单元测试的模拟mongoDB
EN

Stack Overflow用户
提问于 2016-05-23 22:25:23
回答 1查看 5.6K关注 0票数 4

我为Python代码使用nosetest来测试带有MongoDB连接的代码,我使用了python mock标准库和mongoMock:https://github.com/vmalloc/mongomock,我已经修补了pymongo.MongoClient模块来模拟它,但问题是mongoMock对象并没有替换实际的对象,这意味着测试函数仍然使用实际的mongoDB连接。

这是实际的代码:

代码语言:javascript
复制
def post_data():

    connection = MongoClient('mongodb://localhost:27017/').customers.review
    post = {"author": "Mike",
    "text": "My first blog post!",
    "tags": ["mongodb", "python", "pymongo"],
    "votes":1}
    print connection

    connection.insert_one(post)

测试函数:

代码语言:javascript
复制
@mock.patch('pymongo.MongoClient')

def test_post_data(mock_MongoClient):

    mock_MongoClient.return_value= mongomock.MongoClient().db.collection

    post_data()

当我运行测试时,代码仍然插入到实际数据库中,并且代码打印出实际的连接!!请告诉我,它有什么问题,如何正确地进行?

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2016-05-25 18:53:21

我解决了这个问题,这对我来说很棘手,因为实际代码和测试代码工作正常,没有任何问题,只是模拟对象没有被实际调用,因为当我执行@mock.patch时,我提到了这个模块@mock.patch'pymongo.MongoClient',这就是为什么我应该通过以下代码创建连接

代码语言:javascript
复制
connection = pymongo.MongoClient('mongodb://localhost:27017/').customers.review

而不是写作

代码语言:javascript
复制
connection = MongoClient('mongodb://localhost:27017/').customers.review
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37393651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档