Python 使用pytest,当所述方法提示输入另一个输入并且处于连续循环中时,如何测试输入是否导致预期的方法调用?
通常用于测试方法是否对该输入具有预期响应。我们将使用monkeypatch这样的工具来实现这一点,然后我们将断言调用该方法将返回预期值 ,如果第二个具有可预测的返回值,则可以使用类似的方法 现在,如果该方法的预期行为是调用一个也请求输入的方法,该怎么办?目的是确保程序达到第二个输入提示(确认第一个输入具有预期结果)。有没有一种方法可以单独断言这一点 例如:Python 使用pytest,当所述方法提示输入另一个输入并且处于连续循环中时,如何测试输入是否导致预期的方法调用?,python,input,while-loop,pytest,Python,Input,While Loop,Pytest,通常用于测试方法是否对该输入具有预期响应。我们将使用monkeypatch这样的工具来实现这一点,然后我们将断言调用该方法将返回预期值 ,如果第二个具有可预测的返回值,则可以使用类似的方法 现在,如果该方法的预期行为是调用一个也请求输入的方法,该怎么办?目的是确保程序达到第二个输入提示(确认第一个输入具有预期结果)。有没有一种方法可以单独断言这一点 例如: class TwoInputs: def method_a(self): self.action = input(
class TwoInputs:
def method_a(self):
self.action = input("Enter something: ")
if self.action == "jump":
self.method_b()
self.method_a()
elif self.action == "exit":
quit()
def method_b(self):
while True:
self.action = input("Enter some other thing: ")
if self.action == "1":
print("Hello world.")
break
else:
print("Invalid input.")
在上面的上下文中,如何测试方法a成功调用方法b,并在那里结束测试?如果我将monkeypatch输入更改为“跳跃”,然后简单地调用方法a,相同的输入将在方法b中被视为无效,然后将持续循环。要检查方法b是否被调用,您必须模拟它。您还必须模拟
输入
,如您所述,并确保它返回的值将导致程序结束,而不是递归:
@mock.patch(“两个输入。两个输入。方法b”)
@mock.patch(“两个_输入.输入”)
@mock.patch(“两个_输入。退出”)
def test_,_a_调用_b(mock_quit,mock_input,mock_method_b):
#连续调用结果-第二个调用来自“方法a”内部`
mock_input.side_effect=[“跳转”、“退出”]
两个输入=两个输入()
两个_输入。方法_a()
mocked_方法_b.assert_调用了_once()
这假设类位于项目根目录下的two_inputs.py
对于您的情况,我还添加了模拟系统函数quit
(否则测试就会退出),尽管我猜您不会在实际代码中调用它