Я хочу протестировать некоторый код (python 3), который напрямую использует функции print
и input
. Насколько я понимаю, проще всего это сделать с помощью внедрения зависимостей: изменить код так, чтобы он принимал входные и выходные потоки в качестве аргументов, используя по умолчанию sys.stdin
и sys.stdout
и передавая фиктивные объекты во время тестирования. Очевидно, что делать с print
вызовами:
print(text)
#replaced with...
print(text, file=output_stream)
Однако input
не имеет аргументов для входных и выходных потоков. Правильно ли следующий код воспроизводит свое поведение?
text = input(prompt)
#replaced with...
print(prompt, file=output_stream, end='')
text = input_stream.readline()[:-1]
Я взглянул на реализацию input
, и она делает довольно много волшебства, вызывая sys.stdin.fileno
и исследуя sys.stdin.encoding
и sys.stdin.errors
, а не вызывая какой-либо из методов read*
- я не знаю, с чего начать, издеваясь над ними.
input
, так что мне проще. - person Keith   schedule 05.11.2012input
. - person James   schedule 05.11.2012