仅对单元测试进行一次mock.patch操作

5

我正在测试一个执行两次“requests.post”的函数。因此,我对这个函数的调用进行了存根。但是,我希望第一个存根返回虚假数据,第二个存根返回另一组虚假数据。如何实现? 目前,我的代码如下:

@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):
    ...

你可以直接将包含两个模拟对象的数组传递给side_effect,例如 @mock.patch('requests.post', side_effect=[mocked_1, mocked_2]) - MrBean Bremen
2个回答

0
感谢MrBean Bremen。然而,我必须像这样调用列表中的元素:
@mock.patch('requests.post', side_effect=[mocked_1(), mocked_2()])
def test_function_ok(self, mock_post):
    ...

0

你可以发送不同的数据来模拟请求,如果请求两次,它将模拟方法并返回在 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', )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接