Python Unittest макет вложенной функции - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть функция 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

Теперь я хочу написать 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_db.applications.find() внутри main.applications.handlers ничего не возвращает. должно возвращаться [1,2,3] что может быть не так с этим кодом?

1 Ответ

0 голосов
/ 19 декабря 2018

Если предположить, что company_db является опечаткой и должно быть db, то для проверки возвращаемого значения find() вы должны сделать:

mocked_db.<b>return_value</b>.applications.find = MagicMock(return_value=[1,2,3])

mocked_db требуется return_valueпотому что get_db вызывается с именем базы данных.

Вы также можете удалить MagicMock и установить return_value из find напрямую:

mocked_db.return_value.applications.find.<b>return_value</b> = [1, 2, 3]
...