我正在尝试使用mock.patch修补一个用于测试目的的pymongo collection。
因此,让我们考虑以下两个数据库:第一个是实际的数据库,生产代码连接到该数据库。第二个仅用于测试目的。
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])产品代码中的函数执行以下操作:
def get_data():
print(list(mongo.real_db.data.find()))我想在我的测试套件中修补该函数,以便它连接到测试数据库。
我试过了
from mock import patch
@patch('__main__.mongo.real_db.data', new=mongo.test_db.data)
def test_get_data():
get_data()
test_get_data()但它仍然连接到真正的数据库。有谁可以帮助如何正确修补真正的数据库与测试之一?
发布于 2018-02-26 19:51:05
可以将patch.object用作模拟对象的上下文管理器
def test_get_data():
with patch.object(mongo, 'real_db', new=db):
get_data()或者作为一个装饰者
@patch.object(mongo, 'real_db', new=db)
def test_get_data():
get_data()https://stackoverflow.com/questions/48969350
复制相似问题