Super basi c ложный вопрос, который меня расстраивает, спасибо, что заглянули.
У меня есть класс, скажем, IngestionClient
, который реализует некоторые http-запросы к конечным точкам в другом сервисе. Мне нужно издеваться над этим для испытаний.
В прошлом, когда мне не требовалось, чтобы конечные точки действительно что-то делали для тестов, я просто делал
@mock.patch('clients.IngestionClient.endpoint_1', return_value=Mocked200Response())
def test_update(endpoint_1):
...
Но теперь у меня есть еще несколько таких методов в клиенте таким образом, каждый тест имеет как четыре фиктивных декоратора, и мне как-то нужен один из методов, чтобы действительно что-то делать.
Я хотел бы реализовать класс MockedIngestionClient
как что-то вроде
class MockedIngestionClient:
def __init__(self, config):
self.config = config
def endpoint_1(self, *args, **kwargs):
return Mocked200Response()
def endpoint_2(self, row_id, new_value):
with self.config.mysql_connector.get_mysql_session() as sess:
row = sess.query(Table).filter_by(id=row_id)
row.value = new_value
Чтобы в тестах я мог сделать что-то вроде
@mock.patch('clients.IngestionClient', testing_utils.MockedIngestionClient)
def test_update(IngestionClient):
...
Возможно ли это? Я знаю, что мог бы заменить IngestionClient на объект MagicMock, а затем добавить все нужные мне функции в качестве одноразовых, но если бы это было возможно сделать так, как я описал выше, было бы чище.