首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python、Pymongo、Mock :修补pymongo集合

Python、Pymongo、Mock :修补pymongo集合
EN

Stack Overflow用户
提问于 2018-02-25 09:25:57
回答 1查看 323关注 0票数 0

我正在尝试使用mock.patch修补一个用于测试目的的pymongo collection

因此,让我们考虑以下两个数据库:第一个是实际的数据库,生产代码连接到该数据库。第二个仅用于测试目的。

代码语言:javascript
复制
from pymongo import MongoClient

mongo=MongoClient()
mongo.real_db.data.insert_many(
    [{'index': i , 'value':1} for i in range 100])

mongo.test_db.data.insert_many(
    [{'index': i , 'value':'test'} for i in range 100])

产品代码中的函数执行以下操作:

代码语言:javascript
复制
def get_data():
    print(list(mongo.real_db.data.find()))

我想在我的测试套件中修补该函数,以便它连接到测试数据库。

我试过了

代码语言:javascript
复制
from mock import patch 

@patch('__main__.mongo.real_db.data', new=mongo.test_db.data)
def test_get_data():
    get_data()

test_get_data()

但它仍然连接到真正的数据库。有谁可以帮助如何正确修补真正的数据库与测试之一?

EN

回答 1

Stack Overflow用户

发布于 2018-02-26 19:51:05

可以将patch.object用作模拟对象的上下文管理器

代码语言:javascript
复制
def test_get_data():
    with patch.object(mongo, 'real_db', new=db):
        get_data()

或者作为一个装饰者

代码语言:javascript
复制
@patch.object(mongo, 'real_db', new=db)
def test_get_data():
    get_data()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48969350

复制
相关文章

相似问题

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