#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;. Можно ли присвоить каждой переменной имя насмешника?