Having a Python functions as below:
def get_student_id():
while True:
try:
print("ENTER STUDENT ID: ")
identity = int(input())
if identity > 0:
return identity
else:
print("That's not a natural number. Try again: ")
except ValueError:
print("That's not an integer. Try again: ")
and
def test_get_student_id():
with mock.patch.object(builtins, 'input', lambda _: '19'):
assert get_student_id() == '19'
Run pytest command to receive an error: TypeError: test_GetStudentId..() missing 1 required positional argument: ‘_’
Please help to fix above error. Thanks.
Advertisement
Answer
When calling input you’re passing no arguments (input()), but you’re telling unittest.mock that it has one (lambda _:).
You need to be consistent. Either:
Pass one argument when calling it
identity = int(input("ENTER STUDENT ID: ")Instruct unittest.mock that function is called with no arguments
mock.patch.object(builtins, 'input', lambda: '19')
From my PoV, the former makes more sense, as you could also get rid of the print statement before.