嘲笑请求。会话()与pytest的mocker.patch.obj

2024-04-20 11:27:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图模拟在我正在测试的类中创建的请求会话。当mock被创建时,它似乎可以工作,但是类中创建的mock并不相同

class ClassToTest:
  def make_request(url):
    with requests.Session() as session:
      print(session)
      response = session.request(url)
    return response
^{2}$
@pytest.mark.usefixtures('mock_session')
def test(self, mock_session):
  mock_session.request.return_value = expected
  print(mock_session)
  res = ClassToTest().make_request(url)
  assert expected == res

此测试当前失败,打印结果如下:

< MagicMock name='Session' spec='Session' id='1'>

< MagicMock name='Session().\__enter__()' id='2'>

Tags: nameurlmakereturnresponserequestsessiondef
1条回答
网友
1楼 · 发布于 2024-04-20 11:27:54

这是因为ClassToTest正在with上下文中初始化会话。您需要告诉会话模拟在输入with上下文时返回自身,模仿Session类的作用:

@pytest.fixture
def mock_session(mocker):
    mock_session = mocker.patch.object(requests, 'Session', autospec=True)
    mock_session.return_value.__enter__.return_value = mock_session
    return mock_session

相关问题 更多 >