首页 > 解决方案 > 如何使用 python unittest 在模拟对象中模拟列表?

问题描述

我正在尝试从 Mock 对象返回一个列表,但无法使其正常工作。

那是代码:

def execute_call(model, payload):
    result = model.execute(payload)
    code = result[0]

这是我尝试过的测试:

def test_get_code(self, session):
    execute_call = Mock()
    execute_call.return_value = ['123', '123', '123']
    session.return_value = Mock(execute=execute_call)

结果:

code = result[0]
TypeError: 'Mock' object does not support indexing

我不知道如何使 result[0] 工作。'execute_call' 应该是模拟的,但 return_value 需要是一个列表。

任何想法都值得赞赏。

标签: pythonpython-unittestpython-unittest.mock

解决方案


def execute_call(model, payload):
    result = model.execute(payload)
    code = result[0]

def test_execute_call(self):
    mock_model = mock.MagicMock()
    mock_model.execute = mock.MagicMock(return_value=(a,b,c)
    self.execute_call(mock_model, payload)
    assert whatever

您需要将模拟对象传递给函数,以便可以使用它。


推荐阅读