我正在使用pytest测试一个调用requests.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()发布于 2021-02-26 18:35:05
这是一个非常简单的例子。我们希望将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对象在对它们调用方法时返回一个全新的模拟对象(没有配置),所以我们必须这样配置对象。如果我们没有将post配置为返回我们拥有的原始模拟,那么它将返回一个全新的模拟对象,我们的测试将失败。相反,您可以将另一个Mock对象配置为post的返回值,并配置该对象,但我更喜欢这种方法。
下面列出了显示呼叫的说明。
self.session是我们创建的mock_session对象
self.session.post(arg, **kwargs)返回mock_session
mock_session.json()返回我们指定的字典
https://stackoverflow.com/questions/66390963
复制相似问题