Я пытаюсь смоделировать 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.