Вот пример, чтобы показать, где вы идете не так, и с целью объяснения я назначаю лямбда-переменным:
zero_arg_lambda = lambda: "131" # Takes no args
one_arg_lambda = lambda x: "131" # Takes one arg
Вызовите zero_arg_lambda с arg (так же, как ваша ошибка):
zero_arg_lambda(1)
>>> Traceback (most recent call last):
>>> File "<input>", line 1, in <module>
>>> TypeError: <lambda>() takes no arguments (1 given)
Вызовите one_arg_lambda:
one_arg_lambda(1)
>>> "131"
Короче говоря, ваш код передает параметр в лямбду, даже если вы указали, что он не принимает его.
Пример one_arg_lambda принимает параметр и просто возвращает значение справа от двоеточия.Я бы порекомендовал прочитать документы на лямбда
Или, если вы не смотрите туда, ожидаемый формат лямбды:
лямбда-параметры: выражение
Также обратите внимание на документы по monkeypatch.context.setattr , которые имеют хороший пример использования лямбда-выражения.
Для точного определения, ошибка в вашем коде исходит из вызова context.setattr внутри вашего теста.
def test_get_weight_returns_valid_input(monkeypatch):
with monkeypatch.context() as context:
# Old line causing error: context.setattr('builtins.input', lambda: "131")
context.setattr('builtins.input', lambda x: "131") # Fixed