- 此问题在此处已有答案**:
How can I mock user input (from "input" in 3.x, or "raw_input" in 2.x) for a unit test?(7个答案)
昨天关门了。
假设我有这样一个函数:
import random
def randomfunc():
x = random.randint(0,10)
# some code here which generates a name/text randomly and stores it in a .txt file locally/cloud
if x%2 == 0:
y=input("Enter your name:") # I need to enter that name/text exact here
print("Your name is ",y)
else:
print("You got an odd number")
现在,每当我运行这个函数的时候,我希望它检测它是否在请求输入,如果它在请求输入,就输入,否则什么都不做。
记住我不能改变函数内部的任何东西。
我试过这个:
import builtins
from unittest.mock import patch
with patch('builtins.input') as input_mock:
input_mock.side_effect = [
'My Name',
]
print(input('Enter your name:'))
但这里的问题是输入是在执行input语句之前预先确定的,在我的例子中,我的输入值将在作为我的输入值的randomfunc()的执行是动态的/它随时间变化时被决定。
此外,当使用wexpect模块时,它会给我OSError:[WinError 6]句柄无效。
请给我提些解决办法。
2条答案
按热度按时间bakd9h0s1#
我相信这就是你想要的
这个函数会把
randomfunc``input()
替换成你自己的一个返回user_input
的函数,所以如果没有输入函数,它不会像你要求的那样做任何事情,要使用这个函数,只需调用better_randomfunc
并且预计会出现双空格,如果您想消除它,请使用
print("Your name is", y)
而不是print("Your name is ", y)
编辑:我稍微改进了一下,这样你就可以根据提示修改了
ttcibm8c2#
您可以替换内置输入功能