【发布时间】:2012-11-05 19:00:34
【问题描述】:
我想测试一些直接使用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* 方法 - 我不会不知道从哪里开始嘲笑那些。
【问题讨论】:
-
此外,它也可能使用 GNU readline 库。我实际上从不使用
input,所以这对我来说更容易。 -
具体用例是什么?
-
@JonClements:它只是一个简单的前端,要求用户指定一些选项。考虑一下,将答案列表作为可选参数接受可能更容易,但我仍然想知道是否有一种简单的方法可以复制
input的行为。
标签: python dependency-injection python-3.x mocking stdin