我想测试一些直接使用print
和input
函数的Python 3代码。据我所知,最简单的方法是通过依赖注入来实现:修改代码,使其将输入和输出流作为参数传递,并默认使用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
,这让我更容易一些。 - Keith