unittest mock.patch 只有一次

unittest mock.patch only once

我正在测试一个执行两次“requests.post”的函数。 Si 我存根调用这个函数。但是,我希望第一个存根 return 是一个假数据,第二个存根是另一个假数据。怎么做 ? 目前,我有:

@mock.patch('requests.post', side_effect=mocked_object)
def test_function_ok(self, mock_post):
    ...

我想要这样的东西:

@mock.patch_once('requests.post', side_effect=mocked_1)
@mock.patch_once('requests.post', side_effect=mocked_2)
def test_function_ok(self, mock_post):
    ...

感谢 MrBean Bremen。但是,我必须调用列表中的元素,如下所示:

@mock.patch('requests.post', side_effect=[mocked_1(), mocked_2()])
def test_function_ok(self, mock_post):
    ...

您可以将要模拟的不同数据发送到请求两次,它将模拟方法和 return return_value

中指定的预期数据
@patch('the_function_path_you_want_to_mock')
def test_data(self, mock_obj):
    mock_obj.return_value.function_to_be_mocked.return_value = [data_to_mocked]
    response = self.client.post('/request', data=json.dumps(self.input_data), content_type='application/vnd.api+json', )

    mock_obj.return_value.function_to_be_mocked.return_value = [data_to_mocked]
    response = self.client.post('/request', data=json.dumps(self.input_data), content_type='application/vnd.api+json', )