- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我目前正在使用 Python (3.1) 编写一个小应用程序,并且像一个好 child 一样,我正在边做边测试。但是,我遇到了一种我似乎无法进行测试的方法。它包含一个 input()
,因此,我不确定在 doctest 的“预期”部分放置什么。
说明我的问题的示例代码如下:
"""
>>> getFiveNums()
Howdy. Please enter five numbers, hit <enter> after each one
Please type in a number:
Please type in a number:
Please type in a number:
Please type in a number:
Please type in a number:
"""
import doctest
numbers = list()
# stores 5 user-entered numbers (strings, for now) in a list
def getFiveNums():
print("Howdy. Please enter five numbers, hit <enter> after each one")
for i in range(5):
newNum = input("Please type in a number:")
numbers.append(newNum)
print("Here are your numbers: ", numbers)
if __name__ == "__main__":
doctest.testmod(verbose=True)
在运行doctests时,程序在打印出“Expecting”部分后立即停止执行,等待我依次输入五个数字(无提示),然后继续。如下图:
我不知道我可以在我的 doctest 的 Expecting 部分中放置什么,以便能够测试接收然后显示用户输入的方法。所以我的问题(最后)是,这个函数是可测试的吗?
最佳答案
使此可测试的最简单方法是 parameter injection :
def getFiveNums(input_func=input):
print("Howdy. Please enter five numbers, hit <enter> after each one")
for i in range(5):
newNum = input_func("Please type in a number:")
numbers.append(newNum)
print("Here are your numbers: ", numbers)
实际上,您不可能像那样对输入/输出进行单元测试——您不必担心对 input
的调用可能会以某种方式失败。您最好的选择是传递某种性质的 stub 方法;像
def fake_input(str):
print(str)
return 3
因此在您的 doctest 中,您实际上测试了 getFiveNums(fake_input)
。
此外,通过打破对input
的直接依赖现在,如果您以后要将此代码移植到其他没有的地方使用命令行,您可以直接放入新代码来检索输入(无论是 GUI 应用程序中的对话框,还是基于 Web 的应用程序中的 Javascript 弹出窗口等)。
关于python - 接收和显示用户输入的 Doctesting 功能 - Python(撕掉我的头发),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2748564/
我已经使用 OpenCV 函数 cvtColor、Canny 和 HoughLinesP 尝试了下面的代码,但无法获得准确的结果在某些情况下结果或不起作用。 private boolean openc
我正在尝试在 SceneKit 中渲染 3D 模型,但它看起来不正确。例如这个 model (这是一个带有纹理的 SCN 文件,您可以在 Xcode 中重现它): 在 Xcode Scene Edit
今天早上我在 REST 上读了一些书,发现了 HATEOAS principle ("hypermedia as the engine of application state") . 引用REST
我是一名优秀的程序员,十分优秀!