[英]Mock requests.post
我正在使用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()
所以這是一個非常簡單的例子。 我們想將session
設置為MagicMock
object。
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
對象在調用方法時(未配置)返回一個全新的模擬 object,因此我們必須像這樣配置 object。 如果我們沒有將post
配置為返回我們擁有的原始模擬,那么它將返回一個全新的模擬 object,我們的測試將失敗。 相反,您可以將另一個Mock
object 配置為post
的返回值並配置 object,但我更喜歡這種方法。
下面列出了顯示呼叫的說明。
self.session
是我們創建的mock_session
object
self.session.post(arg, **kwargs)
返回mock_session
mock_session.json()
返回我們指定的字典
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.