Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 模拟请求.post_Python_Pytest - Fatal编程技术网

Python 模拟请求.post

Python 模拟请求.post,python,pytest,Python,Pytest,我正在使用pytest测试调用请求的方法。post。有没有一种简单的方法,最好没有第三方库来实现这一点 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 = Di

我正在使用
pytest
测试调用
请求的方法。post
。有没有一种简单的方法,最好没有第三方库来实现这一点

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()

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

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
对象在调用方法时(未配置)返回一个全新的Mock对象,因此我们必须对对象进行配置。如果我们没有将
post
配置为返回我们拥有的原始模拟,那么它将返回一个全新的模拟对象,我们的测试将失败。相反,您可以将另一个
Mock
对象配置为
post
的返回值,并配置该对象,但我更喜欢这种方法

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

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

self.session.post(arg,**kwargs)
返回
mock_会话


mock\u session.json()
返回我们指定的字典

session
的实例化类属性设置为
mock
对象,并配置该
mock
对象。你知道该怎么做吗?不,这我怀疑实际上使用unittest.mock和pytest是可以的?谢谢你的回答。可以使用
unittest.mock和
pytest
,我一直都这样做。如果您只想坚持使用插件,那么有一个
pytestmock
可以让您使用带有烘焙到插件中的
mock
对象的装置