Я написал модуль python, который гарантирует, что некоторый пользовательский ввод имеет определенный тип данных.
pcinput.py
def getFloat( prompt ):
while True:
try:
num = float( input( prompt ) )
except ValueError:
print( "Not a number -- try again" )
continue
return num
def getInteger( prompt ):
while True:
try:
num = int( input( prompt ) )
except ValueError:
print( "Not an integer -- try again" )
continue
return num
Первая функция используется в следующий файл.
pythagoras.py
from math import sqrt
from pcinput import getFloat
def main():
a = getFloat("Give the length of the first leg: ")
b = getFloat("Give the length of the second leg: ")
print("A right-angled triangle with legs", a, "and", b, "has an hypotenuse of",
sqrt(a ** 2 + b ** 2))
if __name__ == '__main__':
main()
Я написал тестовый файл для своего кода pythagoras.
test_pythagoras.py
import pythagoras
def test1(capsys):
input_values = [3, 4]
def mock_input(s):
return input_values.pop(0)
pythagoras.input = mock_input
pythagoras.main()
out, err = capsys.readouterr()
assert out == 'A right-angled triangle with legs 3.0 and 4.0 has an hypothenuse of 5.0\n'
assert err == ''
Когда я запускаю «pytest test_pythagors.py» в командной строке, я получаю следующее сообщение об ошибке.
OSError: pytest: reading from stdin while output is captured! Consider using `-s`.
Кажется, это вызвано функцией getFloat. Если я заменю getFloat на float (input ()), ошибка исчезнет. Может кто-нибудь помочь мне исправить / настроить тестовый файл, не удаляя getFloat?