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
对象的装置