桃花長(zhǎng)相依
2021-10-10 10:57:09
Session.cookies是在 Session 構(gòu)造函數(shù)中定義的,因此我無(wú)法模擬它。有什么辦法可以嘲笑它嗎?from requests import Sessionfrom settings import URLfrom unittest.mock import patch@patch.object(Session, 'cookies', new='my custom mock object')def test_request(): assert function_that_uses_request_cookies()這引發(fā) AttributeError: <class 'requests.sessions.Session'> does not have the attribute 'cookies'如果session在模塊作用域上定義了session實(shí)例,我可以直接修補(bǔ)實(shí)例。但session僅在function_that_uses_request_cookies范圍上定義。有沒(méi)有辦法修補(bǔ)函數(shù)作用域內(nèi)的實(shí)例?
1 回答

泛舟湖上清波郎朗
TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超3個(gè)贊
如所寫(xiě),代碼將修補(bǔ)Session類(lèi)的屬性,但您要做的是修補(bǔ)Session實(shí)例的屬性。要在不中斷會(huì)話(huà)行為的其他方面做到這一點(diǎn),您可以創(chuàng)建一個(gè)模擬對(duì)象,將Session.
def test_request():
mock_session_klass = MagicMock(wraps=Session)
with patch('requests.Session', new=mock_session_klass):
session_instance = mock_session_klass.return_value
session_instance.cookies.return_value = 'my custom mock object'
assert function_that_uses_request_cookies()
添加回答
舉報(bào)
0/150
提交
取消