我正在尝试测试一个依赖多个用户输入的函数来返回一些值。
我已经在这里寻找了多个 unswers,但没有一个能够解决我的问题。我看到了参数化、模拟和猴子补丁的东西,但没有任何帮助。我认为很多是因为我没有清楚地理解正在做的事情背后的概念,我无法适应我的问题。我看到了为此使用外部文件的建议,但我不会依赖它。我正在尝试使用 pytest 和 python 3.7.3
我要测试的功能是这样的
def function():
usr_input = input('please enter a number: ')
while True:
if int(usr_input) < 5:
usr_input = input('please, enter a value less then 5: ')
else:
break
return usr_input
Run Code Online (Sandbox Code Playgroud)
我想知道当插入的值无效时如何传递两个输入值来测试函数。示例:发送值 6 和 2,做出期望值 2 的断言并通过测试。我的其他测试如下所示:
def test_input(monkeypatch):
monkeypatch.setattr('builtins.input', lambda x: 6)
test = function()
assert test == 2
Run Code Online (Sandbox Code Playgroud)
但是,对于这种情况,它们会循环。仅使用参数化或其他简单代码就可以做到这一点吗?
编辑
正如wim在接受的答案中指出的那样,我在我的“if”中添加了一个int(),只是为了防止给未来的读者带来任何混淆。我假设演员阵容是可能的。