为了账号安全,请及时绑定邮箱和手机立即绑定

请求库中的模拟会话

请求库中的模拟会话

海绵宝宝撒 2021-03-29 14:11:48
在我的python代码中,我具有全局requests.session实例:import requestssession = requests.session()我该如何嘲笑呢Mock?是否有用于此类操作的装饰器?我尝试了以下操作:session.get = mock.Mock(side_effect=self.side_effects)但是(按预期方式)此代码session.get在每次测试后不会像@mock.patch装饰器那样返回到原始状态。
查看完整描述

3 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

由于request.session()返回Session类的实例,因此也可以使用patch.object()


from requests import Session

from unittest.mock import patch


@patch.object(Session, 'get')

def test_foo(mock_get):

    mock_get.return_value = 'bar'   


查看完整回答
反对 回复 2021-04-05
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

从先前的答案中得到一些启发,并:


在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


查看完整回答
反对 回复 2021-04-05
  • 3 回答
  • 0 关注
  • 150 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信