Как дать разные возвращаемые значения для фиктивной функции в pytest? - PullRequest
2 голосов
/ 27 апреля 2020

Вот функция для тестирования:

def func_to_be_tested():
    output_first = func1()
    output_second = func1()
    .... rest of function

# func1 will be mocked while testing func_to_be_tested

Я хочу, чтобы output_first и output_second были разными, т. Е. При имитации они должны иметь разные возвращаемые значения func1 в одном тестовом вызове для функции func_to_be_tested.

Есть ли способ сделать это?

Спасибо

Ответы [ 2 ]

2 голосов
/ 27 апреля 2020

Для этого side_effect. Вы можете назначить список на side_effect, и каждое значение в списке будет использоваться как результат при последующих вызовах, например:

from unittest import mock
from path_to_module import func_to_be_tested

@mock.patch('path_to_module.func1')
def test_func_to_be_tested(mocked_func1):
    mocked_func1.side_effect = [output_first, output_second]
    func_to_be_tested()

В этом случае func1 вернет output_first в первом звоните, и output_second во втором.

0 голосов
/ 27 апреля 2020

Попробуйте определить функцию так, чтобы она генерировала случайные значения или значение, зависящее от параметров функции.

...