簡體   English   中英

模擬請求.post

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM