繁体   English   中英

用于python单元测试的mock mongoDB

[英]mock mongoDB for python unit test

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

这是实际的代码:

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)

测试功能:

@mock.patch('pymongo.MongoClient')

def test_post_data(mock_MongoClient):

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

    post_data()

当我运行测试时,代码仍然插入真实数据库,代码打印实际连接! 请问,它有什么问题以及如何正确地做到这一点?

提前致谢!

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

connection = pymongo.MongoClient('mongodb://localhost:27017/').customers.review

而不是写作

connection = MongoClient('mongodb://localhost:27017/').customers.review

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM