Как смоделировать функцию get из request.session? - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь смоделировать функцию get из requests.session, и почему-то это не происходит.

У меня есть следующий код:

#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()?

1 Ответ

0 голосов
/ 08 января 2019

Похоже, вы уже высмеиваете сеанс запросов - так как это 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.

...