我正在使用 pythons mock.patch 并想更改每个调用的返回值。这里需要注意的是:被修补的函数没有输入,所以我不能根据输入更改返回值。
这是我的代码供参考。
def get_boolean_response():
response = io.prompt('y/n').lower()
while response not in ('y', 'n', 'yes', 'no'):
io.echo('Not a valid input. Try again'])
response = io.prompt('y/n').lower()
return response in ('y', 'yes')
我的测试代码:
@mock.patch('io')
def test_get_boolean_response(self, mock_io):
#setup
mock_io.prompt.return_value = ['x','y']
result = operations.get_boolean_response()
#test
self.assertTrue(result)
self.assertEqual(mock_io.prompt.call_count, 2)
io.prompt
只是“输入”的平台独立(python 2和3)版本。所以最终我试图模拟用户的输入。我曾尝试使用列表作为返回值,但这并不能正常工作。
你可以看到,如果返回值是无效的,我会在这里得到一个无限循环。所以我需要一种方法来最终改变返回值,这样我的测试才能真正完成。
(回答这个问题的另一种可能方法是解释我如何在单元测试中模仿用户输入)
不是这个问题的重复,主要是因为我没有能力改变输入。
关于这个问题的答案的评论之一是相同的,但没有提供答案/评论。