请求库中的模拟会话

Art*_*nin 8 python unit-testing mocking

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

import requests
session = requests.session()
Run Code Online (Sandbox Code Playgroud)

我怎么能用它来嘲笑它Mock?这种操作有装饰器吗?我试过以下:

session.get = mock.Mock(side_effect=self.side_effects)
Run Code Online (Sandbox Code Playgroud)

但是(正如预期的那样)这个代码session.get在每次测试后都没有返回到原始状态,就像@mock.patch装饰器一样.

Bla*_*ees 12

由于 requests.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'   
Run Code Online (Sandbox Code Playgroud)


Kos*_*kov 5

使用mock.patch修补会话的模块中。给你,一个完整的工作示例https://gist.github.com/k-bx/5861641