猿问

请求库中的模拟会话

在我的python代码中,我具有全局requests.session实例:


import requests

session = requests.session()

我该如何嘲笑呢Mock?是否有用于此类操作的装饰器?我尝试了以下操作:


session.get = mock.Mock(side_effect=self.side_effects)

但是(按预期方式)此代码session.get在每次测试后不会像@mock.patch装饰器那样返回到原始状态。


海绵宝宝撒
浏览 151回答 3
3回答

不负相思意

由于request.session()返回Session类的实例,因此也可以使用patch.object()from requests import Sessionfrom unittest.mock import patch@patch.object(Session, 'get')def test_foo(mock_get):    mock_get.return_value = 'bar'   

慕莱坞森

从先前的答案中得到一些启发,并:在python模拟中模拟属性我能够模拟这样定义的会话:class MyClient(object):    """    """    def __init__(self):        self.session = requests.session()这样:(get的调用返回一个status_code属性设置为200的响应)def test_login_session():    with mock.patch('path.to.requests.session') as patched_session:        # instantiate service: Arrange        test_client = MyClient()        type(patched_session().get.return_value).status_code = mock.PropertyMock(return_value=200)        # Act (+assert)        resp = test_client.login_cookie()        # Assert        assert resp is None
随时随地看视频慕课网APP

相关分类

Python
我要回答