Я пытаюсь проверить функцию, которая зависит от нескольких пользовательских входов, чтобы вернуть какое-то значение.
Я уже искал несколько вариантов ответов здесь, но никто не смог решить мою проблему. Я видел вещи с параметризацией, фиктивным и обезьяньим патчем, но ничего не помогло. Я думаю, что многое из-за того, что я не совсем понимал концепции того, что делается, и не мог приспособиться к своей проблеме. Я видел предложение использовать внешний файл для этого, но я не буду зависеть от этого. Я пытаюсь с pytest и python 3.7.3
Функция, которую я хочу протестировать, выглядит примерно так
def function():
usr_input = input('please enter a number: ')
while True:
if int(usr_input) < 5:
usr_input = input('please, enter a value less then 5: ')
else:
break
return usr_input
Я хочу знать, как я могу передать два входных значения для проверки функции, когда введенное значение недопустимо. Пример. Отправьте значения 6 и 2, задайте ожидаемое значение 2 и пройдите тест. Мои другие тесты выглядят так:
def test_input(monkeypatch):
monkeypatch.setattr('builtins.input', lambda x: 6)
test = function()
assert test == 2
но для этого случая они зацикливаются. Это можно сделать только с помощью параметризации или другого простого кода?
EDIT
Я добавил int () в свое «если», как указывал Вим в принятом ответе, просто чтобы не допустить путаницы для будущих читателей. Я предполагаю, что приведение возможно.