Как смоделировать POST-запросы в python, используя unittest.mock - PullRequest
0 голосов
/ 13 марта 2020

Я пытаюсь смоделировать POST-запросы, направленные в другую службу.

Эта служба принимает JSON данные следующего формата -

{
    'input' : 'data string'
}

И возвращает -

{
    'processed' : 'processed data string'
}

У меня есть следующая реализация для доступа к этой службе -

FileA.py

class Client:
    def __init__(self, processing_url):
        self.processing_url = processing_url

    def process(self, data):
        resp = requests.post(url=self.processing_url, json={'input':data})
        return resp.json()['processed']


class Stuff:
    def __init__(self, config):
        self.config = config
        self.client = Client(config['url'])

        # Ping To Test
        processed = self.client.process("Hello World")

    def maker(self, data):
        # Tasks
        data_p = self.client.process(data)
        # Tasks
        return data_p

FileB.py

from FileA import Stuff

config = {'url':'http://....'}
stuff_maker = Stuff(config)

def do_things(data):
    # Things
    data = stuff_maker.maker(data)
    # Things
    return data

Я хочу проверка do_things функции. То, что я пробовал до сих пор -

Test.py

from unittest.mock import Mock, patch
from FileB import do_things

@patch("FileA.Client.process.requests.post")
def test_things(mock_post):
    mock_post.return_value = Mock(ok=True)
    mock_post.return_value.json.return_value = {'processed':'_hello _world'}
    test_case = do_things("Hello World")
    assert #Some assertion case here.

Ошибка - я продолжаю получать сообщение об ошибке для клиента, пытающегося подключиться к сервису при пинге «Hello World» при инициализации Client () в Stuff ()

EDIT -

Я понял, что инициирую объект Stuff, прежде чем высмеивать функцию процесса внутри клиента. Я пытался сделать это тоже, но это выдает мне похожую ошибку -

from unittest.mock import Mock, patch

@patch("FileA.Client.process.requests.post")
def test_things(mock_post):
    mock_post.return_value = Mock(ok=True)
    mock_post.return_value.json.return_value = {'processed':'_hello _world'}

    from FileB import do_things

    test_case = do_things("Hello World")
    assert #Some assertion case here.
...