У меня регулярно возникает эта проблема, когда я пытаюсь протестировать код, который вызывает диалоги для пользовательского ввода, и одно и то же решение должно работать для обоих. Вам необходимо предоставить новую функцию, связанную с именем input
, в вашей области тестирования с той же сигнатурой, что и у стандартной функции input
, которая просто возвращает значение теста без фактического запроса пользователя. В зависимости от того, как настроены ваши тесты и код, это внедрение может быть выполнено несколькими способами, поэтому я оставлю это в качестве упражнения для читателя, но ваш метод замены будет выглядеть примерно так:
def my_test_input(message):
return 7
Очевидно, что вы также можете включить содержимое message
, если это уместно, и, конечно, вернуть тип данных по вашему выбору. Вы также можете сделать что-то более гибкое и общее, что позволяет использовать один и тот же метод замены в ряде ситуаций:
def my_test_input(retval, message):
return retval
и затем вы вставите частичную функцию в input
:
import functools
test_input_a = functools.partial(my_test_input, retval=7)
test_input_b = functools.partial(my_test_input, retval="Foo")
Оставляя test_input_a
и test_input_b
в качестве функций, которые принимают один аргумент message
с уже связанным аргументом retval
.