第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從__getattr__方法檢索的模擬函數(shù)

從__getattr__方法檢索的模擬函數(shù)

慕尼黑8549860 2021-03-29 13:11:13
我正在自動化一些存儲庫操作,并且正在使用GitPython來完成這項工作。讓我們簡化事情并假設我想斷言我的函數(shù)是否pull在存儲庫上調用了method。代碼如下:from pytest_mock import MockFixturefrom git import Git, Reporepo = Repo('/Users/Jatimir/path/to/repo')def pull() -> None:    repo.git.pull()但是,我注意到Git該類有些特殊,沒有實現(xiàn)pull。相反,它將“委派”所有__getattr__使用另一種方法完成工作的流量。def __getattr__(self, name):    ...    return lambda *args, **kwargs: self._call_process(name, *args, **kwargs)我的問題是如何進行測試?我正在使用pytest和提供測試裝置的pytest-mock,mocker這是我的嘗試:def test_pull1(mocker: MockFixture) -> None:    pull_mock = mocker.MagicMock(name='pull')    getattr_mock = mocker.MagicMock(name='__getattr__', return_value=pull_mock)    mocker.patch.object(Git, '__getattr__', getattr_mock)    pull()    pull_mock.assert_called_once_with()def test_pull2(mocker: MockFixture) -> None:    pull_mock = mocker.Mock(name='pull')    def __getattr__(self, name):        if name == 'pull':            return pull_mock    mocker.patch.object(Git, '__getattr__', __getattr__)    pull()    pull_mock.assert_called_once_with()它們都可以工作,但是我覺得有更好的方法,也許我測試這種方法是錯誤的。
查看完整描述

1 回答

?
小怪獸愛吃肉

TA貢獻1852條經驗 獲得超1個贊

使用create參數(shù),我設法通過以下代碼實現(xiàn)了我想要的:


def test_pull(mocker: MockFixture) -> None:

    m = mocker.patch.object(Git, 'pull', create=True)

    pull()

    m.assert_called_once_with()

摘錄的文檔解釋了什么create=True:


默認情況下,patch()將無法替換不存在的屬性。如果您傳入create = True,并且該屬性不存在,則在調用已修補的函數(shù)時,patch將為您創(chuàng)建該屬性,然后再將其刪除。


查看完整回答
反對 回復 2021-04-13
  • 1 回答
  • 0 關注
  • 143 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號