我需要测试一些python 3代码,并且我在几乎没有输入()的情况下卡住测试功能。
示例:
def two_answers():
if input("Input 'go' to proceed") != "go":
return two_answers()
else:
while input("Input 'bananas' to proceed") != "bananas":
print("What?!")
print("You've just gone bananas!")
对于具有一个输入的功能,我使用:
def test_some_function(self):
codefile.input = lambda x: 'u'
codefile.some_function() . . . .
然后:
def teardown_method(self, method):
codefile.input = input
要还原输入。
但在这里它不会起作用。救命啊!
答案 0 :(得分:0)
答案 1 :(得分:0)
这是我的解决方案:
def test_some_function(self):
codefile.input = SimulatedInput("u","v")
codefile.some_function() . . . .
然后你可以像以前一样使用它:
{{1}}
答案 2 :(得分:0)
我会将输入包装到函数中。
def input_wrap(prompt):
return input(prompt)
然后你可以注射它。
def two_answers(input_func):
if input_func('...') != 'go':
return two_answers(input_func)
...
现在,当你想测试它时,你可以注入假冒或模拟:
def test_two_answers(self):
fake_input = mock.MagicMock()
fake_input.side_effect = ['go', 'foo', 'bananas']
two_answers(fake_input) # no assertion for needed since there's no return value
稍后在执行two_answers的代码中,您可以这样调用它:
two_answers(input_wrap)
答案 3 :(得分:-1)
没有依赖关系的简约示例。使用它来扩展它,如你所愿:
import sys
import io
def two_answers():
if input("Input 'go' to proceed") != "go":
return two_answers()
else:
while input("Input 'bananas' to proceed") != "bananas":
print("What?!")
print("You've just gone bananas!")
def wrapper():
lines = ["go", "bananas"]
def fake_input(*args, **kwargs):
return lines.pop(0)
global input
real_input = input
input = fake_input
two_answers()
input = real_input
wrapper()