Session.cookies
是在Session构造函数中定义的,因此我无法对其进行模拟。有没有办法模拟它?
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
范围内定义。有什么方法可以在功能范围内修补实例?
答案 0 :(得分:0)
按照编写的代码将修补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()