【发布时间】:2021-07-19 23:58:10
【问题描述】:
我有一个测试函数,我成功地修补了一个函数调用以返回一个模拟结果。它只适用于调用修补函数的一次:
@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_value 的 return_value(如果这有意义的话)。
【问题讨论】: