我试图从requests.session中模拟get函数,但它最终并没有发生。
我有以下代码:
#main.py
import requests
def function_with_get():
c = requests.session()
c.get('https://awesome_url.com')
# do some other stuff
return c
def second_function_with_get(client):
c.get('https://awesome_url.com')
# do some other stuff
#test.py
from unittest import mock
from django.test import TestCase
class Testing(TestCase):
@mock.patch('main.requests.session.get)
@mock.patch('main.requests.session)
def test_which_fails_because_of_get(mock_sess, mock_get):
client = function_with_get()
second_function_with_get(client)
assertEqual(mock_requests_session_get.call_count, 2)测试抛出一个断言错误,mock_get被调用0次(0 != 2)
如何模拟get的requests.session()函数?
发布于 2019-01-08 15:28:24
似乎您已经在模拟请求会话--因为它是一个MagicMock,您不需要另外模拟get方法本身--检查会话上的调用就足够了。
因此,您的test.py可能如下所示:
#test.py
from unittest import mock
from unittest import TestCase
from main import function_with_get, second_function_with_get
class Testing(TestCase):
@mock.patch('main.requests.session')
def test_which_fails_because_of_get(self, mock_sess):
client = function_with_get()
second_function_with_get(client)
self.assertEqual(mock_sess.return_value.get.call_count, 2)您也可以尝试使用模拟的SessionMock方法创建您自己的get类,但是它也需要为每个测试正确地设置(或重置)它。就我个人而言,我发现使用MagicMock及其return_value链更容易。
https://stackoverflow.com/questions/54094309
复制相似问题