Как правильно выполнить модульное тестирование функции, которая захватывает ConnectionError из библиотеки запросов - PullRequest
0 голосов
/ 13 марта 2020

У меня есть функция, которая делает вызов покоя с запросами lib

Она должна возвращать "о-нет" вызывающей стороне, если она не может подключиться по любой причине

Я использую ответы для модульные тесты, которые позволят мне проверить это без фактического исходящего вызова

Я могу проверить это следующим образом:

# the function
def my_request(url):
    try:
        return requests.request(url=url)
    except requests.exceptions.ConnectionError:
        return "oh-no"
    except Exception:
        raise

# my test without responses
def test_request():
    bad_url = "https://lskjdklfjslkfjslkdf.eee.com"
    response = myapp.my_request(bad_url)
    assert response == 'oh-no'

Но мне интересно, может ли библиотека ответов сделать это лучше? Ответы

# test with responses
@responses.activate
def test_request():
    bad_url = "https://lskjdklfjslkfjslkdf.eee.com"
    responses.add(
      "post",
      bad_url,
      json={"error": "not found"},
      status=500,
    )

    response = myapp.my_request(bad_url)
    assert response == 'oh-no'

не приведут к исключению - я думаю, это является его целью. Прежде чем я просто использую запросы с неверным URL-адресом для генерации исключения в моем модульном тесте (что выглядит не так уж плохо), я хочу знать, может ли библиотека ответов вызвать исключение, не совершая исходящий вызов? И если даже пытаться делать это бессмысленно (если я должен просто использовать запросы, как в первом примере, и покончить с этим).

...