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]