python单元测试模拟嵌套函数
我在python单元测试模拟嵌套函数,python,unit-testing,python-unittest,Python,Unit Testing,Python Unittest,我在main.applications.handlers包中有一个函数x from main.config import get_db def x(company_name): db = get_db('my_db') apps = [] for x in company_db.applications.find(): print(x) apps.append(x) return a
main.applications.handlers
包中有一个函数x
from main.config import get_db
def x(company_name):
db = get_db('my_db')
apps = []
for x in company_db.applications.find():
print(x)
apps.append(x)
return apps
现在我想为这个方法编写unittest
from unittest.mock import Mock,patch, MagicMock
@mock.patch('main.applications.handlers.get_db')
def test_show_applications_handler(self, mocked_db):
mocked_db.applications.find = MagicMock(return_value=[1,2,3])
apps = x('test_company') # apps should have [1,2,3] but its []
print(apps)
但是company\u db.applications.find()
内main.applications.handlers
没有返回任何内容。它应该返回[1,2,3]
此代码可能有什么问题?假设
company\u db
是一个打字错误,应该是db
,然后要模拟find()
的返回值,您可以执行以下操作:
mocked_db.return_value.applications.find = MagicMock(return_value=[1,2,3])
如果将
apps=x('test_company')
中的x替换为find
,会得到什么结果?@Nick find未定义error@Nick当我在中打印(company\u db.applications.find())
时,我得到了
,我还尝试了这个mock\u db.return\u value.applications.return\u value.find.return\u value=[1,2,3]
但同样的结果是公司\u db
打字错误?我看不出这是怎么定义的。大概应该是db
?@当我使用mocked\u db().return\u value.applications.find=MagicMock(return\u value=[1,2,3])
时,它将保持工作状态,但不使用mocked\u db.return\u value.applications.find=MagicMock(return\u value=[1,2,3])
mocked_db.return_value.applications.find.return_value = [1, 2, 3]