【发布时间】:2019-02-14 08:09:13
【问题描述】:
已在此处提出此问题 Pytest: How to test a function with input call?
但 mareoraft(下)的答案不适用于函数调用,它仅适用于当前测试函数范围内。
原答案:
def test_something_that_involves_user_input(monkeypatch):
# monkeypatch the "input" function, so that it returns "Mark".
# This simulates the user entering "Mark" in the terminal:
monkeypatch.setattr('builtins.input', lambda x: "Mark")
# go about using input() like you normally would:
i = input("What is your name?")
assert i == "Mark"
这是我将输入移动到另一个函数的测试代码(失败)
def separate_input_function():
a = input()
return a
def test_separate_function_monkeypatch_input(monkeypatch):
ans = '3'
with monkeypatch.context() as m:
m.setattr('builtins.input', lambda prompt: ans)
result = separate_input_function()
assert result == ans
这引发了
TypeError: <lambda>() missing 1 required positional argument: 'prompt'
关于如何让它发挥作用的任何想法?
谢谢
【问题讨论】:
标签: python pytest monkeypatching