Session.cookies是在会话构造函数中定义的,因此我不能模拟它。有什么方法可以嘲笑它吗?
from requests import Session
from settings import URL
from unittest.mock import patch
@patch.object(Session, 'cookies', new='my custom mock object')
def test_request():
assert function_that_uses_request_cookies()这将引发AttributeError: <class 'requests.sessions.Session'> does not have the attribute 'cookies'
如果在模块作用域上定义了session实例,我就可以直接修补session实例。但session仅在function_that_uses_request_cookies作用域上定义。有没有办法在函数作用域内修补实例?
发布于 2019-05-29 13:10:26
按照编写的方式,代码将修补Session类的属性,但您要做的是修补Session实例的属性。要做到这一点而不中断会话行为的其他方面,您可以创建一个包装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()https://stackoverflow.com/questions/54164162
复制相似问题