Значение Python Unittest, возвращенное из промежуточного метода - PullRequest
0 голосов
/ 02 июля 2018

У меня есть приложение Flask, которое предоставляет метод, который ожидает почтовое значение. В этой конечной точке я беру данные запроса и создаю событие, которое отправляю в Kafka. В зависимости от того, что содержит значение запроса, событие может отличаться. Я хочу написать серию тестов, подтверждающих, что метод, который создает мое событие, работает так, как ожидалось. Без тонны деталей это базовая структура ресурса Gateway.

class Gateway(Resource):
    def build_event(self, request):
        event = {
            "key": uuid4(),
            "source_ip": request.remote_addr,
            "payload_checksum": = haslib.md5(request.data).hexdigest(),
            ...
        }
        if request.data['some-key']:
             event["key-specific-value"] = "foo"
        else:
             event["key-specific-value"] = "bar"


    def post(self):
        event = self.build_event(request)
        kafka_producer.send(event)       

Я хочу написать несколько тестов, которые позволяют мне вызывать метод post и проверять правильность события, возвращаемого из build_event. Как можно проверить значение структуры, возвращаемой из build_event в модульном тесте?

1 Ответ

0 голосов
/ 02 августа 2018

Старайтесь не тестировать несколько методов в тестовом примере. Напишите один тест для post, который проверяет self.build_event и kafka_producer.send. Затем напишите другой контрольный пример, который вызывает только build_event и проверьте возвращаемое значение этого.

Чтобы ответить на исходный вопрос, вы можете создать фиктивный объект и передать его в качестве параметра запроса следующим образом:

def test_build_event(self):
    mock_request = mock.Mock(remote_addr='some remote address', data={'some-key': False})
    gateway = Gateway()
    event_return_val = gateway.build_event(mock_request)
    self.assertEqual(event_return_val['key-specific-value'], 'bar')
    self.assertTrue('key' in event_return_val)

Вы можете усложнить и mock.patch звонки на uuid4() и hashlib.md5(). Это позволит вам сравнить с точным значением в ваших возвращенных event и исправленных возвращаемых значениях. Для начала, вы можете просто проверить, существуют ли ключи, как я делал в случае выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...