繁体   English   中英

python模拟方法里面的帖子

[英]python Mock post inside a method

我如何在方法内部模拟帖子,以便进行单元测试?

    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

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

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

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

mock第三方软件包 ,但在Python 3.3中作为unittest软件包的一部分被添加到标准库中。)

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


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

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

当您要测试该函数时,只需将另一个可调用对象作为可选的第二个参数传递。

请注意,您可以为两种类型的帖子提供单独的功能,这可能比使用模拟更易于测试:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM