Как исправить patch.get из другого файла в Python - PullRequest
1 голос
/ 28 марта 2019

У меня есть 2 файла Python: 1 для модульного тестирования (tests.py) и 1 для скрипта, который я хочу протестировать (main.py):

# In main.py:

import requests

def get_response(url):
    response = requests.get(url);
    # Do stuff...
    return response

-

# In tests.py

from unittest import mock
from unittest.mock import patch
from my_project.main import get_response

def some_handler(url):
    return "test_response"

class GetResponseTestCase(unittest.TestCase):

    def setUp(self):

        # setup mocks
        patch('requests.get', mock.Mock(side_effect=some_handler)

    def run_test(self):

        result = get_response("test_response")

Я хочу пропатчить requests.get, чтобы вернуть test_response, но исправление не работает, поскольку он пытается отправить запрос / установить соединение с указанным URL-адресом.Я думаю, что название патча requests.get не предназначено для места, где оно используется в main.py (как оно ссылается на то, где оно определено вместо), как некоторые люди упоминали в Интернете.Но в этом случае я не уверен, как это исправить.

Если в main.py используется import requests, то как я могу исправить это из другого файла?Спасибо.

Ответы [ 2 ]

1 голос
/ 28 марта 2019
  1. Mock get_reponse вместо насмешки reports.get (насмешливые встроенные функции; в таком простом сценарии использования возможность использования в python не требуется).
  2. Установить возвращаемое значение функции mocked get_response на "test_response" .

In tests.py

from unittest import mock

class GetResponseTestCase(unittest.TestCase):

    @mock.patch("my_project.main.get_response") ##mocking get_response
    def run_test(self, mocked_get_response):
        mocked_get_response.return_value = "test_response" ## setting return value
0 голосов
/ 28 марта 2019

Обнаружено, что мне нужно добавить .start() в конце вызова для создания патча:

# setup mocks
patch('requests.get', mock.Mock(side_effect=some_handler).start()

Если есть какие-либо проблемы с этим решением или лучший способ для его решения, яхотел бы услышать это!

...