gpt4 book ai didi

python - 接收和显示用户输入的 Doctesting 功能 - Python(撕掉我的头发)

转载 作者:太空狗 更新时间:2023-10-29 22:12:01 24 4
gpt4 key购买 nike

我目前正在使用 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 results

我不知道我可以在我的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com