首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟requests.post

模拟requests.post
EN

Stack Overflow用户
提问于 2021-02-26 18:22:23
回答 1查看 111关注 0票数 0

我正在使用pytest测试一个调用requests.post的方法。有没有一种简单的方法,最好没有第三方库来做这件事?

代码语言:javascript
复制
class Dispatcher:
    def __init__(self, url):
    self.url = url
    self.session = None

    def dispatch(self):
        return self.session.post(self.url).json()


def test_dispatch():
    d = Dispatcher(url="")
    d.session = # ... here, how can I mock the return value of json()?
    result = d.dispatch()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-26 18:35:05

这是一个非常简单的例子。我们希望将session设置为MagicMock对象。

代码语言:javascript
复制
from unittest.mock import MagicMock

def test_dispatch():
    expected = {"fizz": "buzz"}
    mock_session = MagicMock()
    mock_session.configure_mock(
        **{
            "post.return_value": mock_session,
            "json.return_value": expected
        }
    )

    d = Dispatcher(url="")
    d.session = mock_session
    result = d.dispatch()

    assert result == expected

由于Mock对象在对它们调用方法时返回一个全新的模拟对象(没有配置),所以我们必须这样配置对象。如果我们没有将post配置为返回我们拥有的原始模拟,那么它将返回一个全新的模拟对象,我们的测试将失败。相反,您可以将另一个Mock对象配置为post的返回值,并配置该对象,但我更喜欢这种方法。

下面列出了显示呼叫的说明。

self.session是我们创建的mock_session对象

self.session.post(arg, **kwargs)返回mock_session

mock_session.json()返回我们指定的字典

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66390963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档