首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从requests.session中模拟get函数?

如何从requests.session中模拟get函数?
EN

Stack Overflow用户
提问于 2019-01-08 14:51:20
回答 1查看 2.4K关注 0票数 0

我试图从requests.session中模拟get函数,但它最终并没有发生。

我有以下代码:

代码语言:javascript
复制
#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)

如何模拟getrequests.session()函数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-08 15:28:24

似乎您已经在模拟请求会话--因为它是一个MagicMock,您不需要另外模拟get方法本身--检查会话上的调用就足够了。

因此,您的test.py可能如下所示:

代码语言:javascript
复制
#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链更容易。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54094309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档