Пересмешивание вызова функции внутри функции в Python - PullRequest
0 голосов
/ 24 февраля 2020

Я впервые строю модульные тесты, и я не совсем уверен, как действовать дальше. Вот функция, которую я хотел бы проверить; это метод в классе, который принимает один аргумент url и возвращает одну строку task_id :

def url_request(self, url):
    conn = self.endpoint_request()
    authorization = conn.authorization

    response = requests.get(url, authorization)

    return response["task_id"]

Метод начинается с вызова другого метода в тот же класс, чтобы получить токен для подключения к конечной точке API. Должен ли я издеваться над выводом этого вызова ( self.endpoint_request () )?

Если мне нужно его смоделировать, и моя тестовая функция выглядит следующим образом, как мне передать поддельный токен / auth endpoint_request ответ?

@patch("common.DataGetter.endpoint_request")
def test_url_request(mock_endpoint_request):
    mock_endpoint_request.return_value = {"Auth": "123456"}

    # How do I pass the fake token/auth to this?
    task_id = DataGetter.url_request(url)

1 Ответ

0 голосов
/ 10 марта 2020

В показанном вами коде сильно доминируют взаимодействия. Что означает, что при юнит-тестировании, скорее всего, ошибок не будет найдено: потенциальные ошибки находятся на уровне взаимодействия: вы обращаетесь к conn.authorization - но это правильный член? И есть ли у него уже правильное представление о том, что вам нужно в дальнейшем? requests.get правильный метод для работы? Является ли порядок аргументов, как вы ожидаете? Возвращаемое значение соответствует ожидаемому? task_id написано правильно?

Это (некоторые из) потенциальных ошибок в вашем коде. Но при модульном тестировании вы не сможете их найти: когда вы заменяете зависимые компоненты на некоторые макеты (которые вы создаете или настраиваете), ваши модульные тесты будут просто успешными: допустим, у вас неправильное представление о возвращаемое значение requests.get, а именно то, что task_id написано неправильно и скорее должно быть написано taskId. Если вы будете издеваться над requests.get, вы будете реализовывать эту ложь, основываясь на своем заблуждении. То есть, ваш макет вернул бы карту с (ошибкой) ключом task_id. Тогда юнит-тест завершится успешно, несмотря на ошибку.

Эта ошибка будет обнаружена только в интеграционном тестировании, где вы объединяете свой компонент и зависимые компоненты. Только тогда вы сможете проверить предположения, сделанные в вашем компоненте, относительно реальности других компонентов.

...