方法内的python模拟帖子

2024-04-20 10:36:59 发布

您现在位置:Python中文网/ 问答频道 /正文

如何在一个方法中模拟一个帖子,这样我就可以进行单元测试了?在

    def send_report(self, data):
        url = settings.WEBHOOK_PO
        payload = json.dumps(data)
        requests.post(url, data=payload)
        url = settings.WEBHOOK_LQA
       response = requests.post(url, data=payload)
       return response.status_code

有没有一种方法可以覆盖单元测试的这种方法而不实际发布?在


Tags: 方法selfreportsendurldatasettingsresponse
1条回答
网友
1楼 · 发布于 2024-04-20 10:36:59

您可以使用mock库将requests.post替换为其他内容:

with mock.patch('requests.post') as mock_post:
    foo.send_report(data)

mock是一个third-party package,但在python3.3中作为unittest包的一部分添加到标准库中。)

mock_post可以配置为在测试期间提供所需的行为;有关详细信息,请参阅mock文档。在


另一个选择是修改方法,将post函数作为参数,而不是对函数进行硬编码(这是一个依赖注入的例子):

^{pr2}$

当您想测试函数时,只需传递一个不同的可调用对象作为可选的第二个参数。在

请注意,您可以为这两种类型的post提供单独的函数,这可能会使测试比mock更容易:

from functools import partial

def send_report(self,
                data,
                post_po=partial(requests.post, settings.WEBHOOK_PO),
                post_lqa=partial(requests.post, settings.WEBHOOK_LQA)):
    payload = json.dumps(data)
    post_po(data=payload)
    response = post_lqa(data=payload)
    return response.status_code

相关问题 更多 >