簡體   English   中英

在pytest中的函數內為同一調用返回不同的模擬結果

[英]Return different mock results for the same call within a function in 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_value 的 return_value (如果有道理的話)。

模擬的side_effect屬性可以包含一個可迭代對象——可迭代對象中的每個項目都將按順序返回:

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

將此與您的示例相結合:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM