python unittest模拟嵌套函数

时间:2018-12-19 10:40:27

标签: python unit-testing python-unittest

我在x包中有一个函数main.applications.handlers

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

现在我想为此方法编写单元测试。

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_db.applications.find()中的main.applications.handlers未返回任何内容。它应返回[1,2,3] 此代码可能有什么问题?

1 个答案:

答案 0 :(得分:0)

假设}是一个错字,应为company_db,然后模拟db的返回值,您可以这样做:

mocked_db.return_value.applications.find = MagicMock(return_value=[1,2,3])

find()需要一个mocked_db,因为用数据库名调用了return_value

您也可以放下get_db并直接设置MagicMock的{​​{1}}:

mocked_db.return_value.applications.find.return_value = [1, 2, 3]