Имитационная функция используется два раза/с одним и тем же именем

#python #testing #mocking #pytest

#питон #тестирование #осмеяние #пытест

Вопрос:

У меня есть функция для тестирования, которая дважды вызывает одну и ту же функцию, но эта функция возвращает два разных данных. Мне нужно создать макет для первой переменной, а затем для второй, у меня есть решение, но в некоторых случаях оно не работает. Я хочу иметь возможность издеваться над переменной api_result_first и переменной api_result_second, которая использует api_call().

У тебя есть идея?

Мой код :

 import pandas as pd import time import random   def api_call():  time.sleep(2)  return random.randint(0,9)  def slow_function():  api_result_first = api_call()  api_result_second = api_call()  result = api_result_first   api_result_second  return result  

Моя Самая большая :

 from a import * import pytest  # https://changhsinlee.com/pytest-mock/  def test_aa(mocker):  mocker.patch("a.api_call", return_value="ok")  value = slow_function()  assert isinstance(value, int)  

Ответ №1:

Используется side_effects для предоставления последовательности возвращаемых значений для использования.

 def test_aa(mocker):  mocker.patch("a.api_call", side_effects=[3, 5])  value = slow_function()  assert value == 8  

Комментарии:

1. Спасибо, отлично !

2. Я проверил и на своей стороне, и это не работает. Макет возвращает мне объект такого рода: lt;имя MagicMock=’api_call().__добавить__()’ идентификатор=’2397105397088’gt;. Можно ли присвоить каждой переменной имя насмешника?