Python фиктивные значения с использованием side_effect, но для функции, которая возвращает несколько параметров - PullRequest
0 голосов
/ 05 марта 2020
results=[("a", "b"),("c", "d")]
with patch('app.return_alpha.Alpha.return_multiple', side_effect=results) as mymock1:
     v=Alpha()
     first, second = v.return_multiple()
     third, fourth = v.return_multiple()

основная функция:

def return_multiple():
     #some db operation
     return a,b

ошибка получения

ValueError: недостаточно значений для распаковки (ожидается 2, получено 1)

1 Ответ

1 голос
/ 05 марта 2020

Это работает как ожидалось. Минимальный пример:

python 3.6.8

>>> from unittest.mock import patch
>>> class A:
...     def return_multiple(self):
...         return 'a', 'b'
... 
>>> with patch('__main__.A.return_multiple', side_effect=[(1, 1), (2, 2), (3, 3)]) as _mymock1:
...     v = A()
...     first, second = v.return_multiple()
...     third, fourth = v.return_multiple()
... 
>>> print(third, fourth)
2 2
...