Этот вопрос был задан здесь
Pytest: Как проверить функцию с помощью входного вызова?
Но ответ от mareoraft (ниже) не работает для вызова функции, он работает только внутри текущей области тестовой функции.
оригинальный ответ:
def test_something_that_involves_user_input(monkeypatch):
# monkeypatch the "input" function, so that it returns "Mark".
# This simulates the user entering "Mark" in the terminal:
monkeypatch.setattr('builtins.input', lambda x: "Mark")
# go about using input() like you normally would:
i = input("What is your name?")
assert i == "Mark"
Вот тестовый код, в который я переместил ввод в другую функцию (это не удалось)
def separate_input_function():
a = input()
return a
def test_separate_function_monkeypatch_input(monkeypatch):
ans = '3'
with monkeypatch.context() as m:
m.setattr('builtins.input', lambda prompt: ans)
result = separate_input_function()
assert result == ans
Это поднимает
TypeError: <lambda>() missing 1 required positional argument: 'prompt'
Есть идеи, как заставить это работать?
Спасибо