在pytest中,为函数内的同一调用返回不同的模拟结果



我有一个测试函数,我成功地修补了一个函数调用以返回模拟结果。它只工作一次,修补后的函数被称为:

@patch(‘db.get_session’)
def test_some_function(mock_session):
mock_session.return_value.query.return_value = MockResult(1)
assert some_function()

然而,我正在尝试测试一个多次使用get_session((.query((的函数,每次都应该返回不同的结果。我不知道该怎么嘲笑这件事。

@patch(‘db.get_session’)
def test_some_other_function(mock_session):
# First call should return one
mock_session.return_value.query.return_value = MockResult(1)
# Second call should return no results:
mock_session.return_value.query.return_value = MockResult(0)
assert some_other_function()
def some_other_function():
session = get_session()
one = session.query('some_query')
zero = session.query('some_other_query')
if one == 1 and zero == 0:
return True

我已经看了side_effect,但我不确定如何设置它,因为我不是在更改直接的return_value,而是return_vvalue的return_value(如果有意义的话(。

mock的side_effect属性可以包含一个可迭代项——可迭代项中的每个项都将按顺序返回:

>>> m = mock.Mock(side_effect=(1, 2))
>>> m()
1
>>> m()
2

结合你的例子:

mock_session.return_value.query.side_effect = (MockResult(1), MockResult(0))

最新更新