Почему покрытие pytest пропускает утверждение сообщения об исключительной ситуации? - PullRequest
0 голосов
/ 20 сентября 2019

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

def scrap(date, x, y):
    response = requests.post(api_url, json={'date': date, 'x': x, 'y': y})
    if response.status_code == 200:
        output = loads(response.content.decode('utf-8'))
        return output
    else:
        raise Exception('Invalid input')

Это тест для него:

from scrap import scrap

def test_scrap():
    with pytest.raises(Exception) as e:
        assert scrap(date='test', x=0, y=0)
        assert str(e.value) == 'Invalid input'

Но тесты покрытия почему-то пропускают последнюю строку,Кто-нибудь знает почему?Я попытался изменить код на with pytest.raises(Exception, match = 'Invalid input') as e, но я получаю сообщение об ошибке:

AssertionError: Pattern 'Invalid input' not found in "date data 'test' does not match format '%Y-%m-%d %H:%M:%S'"

Означает ли это, что он на самом деле ссылается на сообщение об исключении из API вместо моей оболочки?

Ответы [ 2 ]

0 голосов
/ 25 сентября 2019

Это не доходит до вашего второго утверждения из-за возбужденного исключения.Что вы можете сделать, это утверждать, что это значение следующим образом:

def test_scrap():
    with pytest.raises(Exception, match='Invalid input') as e:
        assert scrap(date='test', x=0, y=0)

Я бы сказал, что вы получаете сообщение об ошибке "AssertionError: Шаблон" Неверный ввод "не найден в" тесте данных даты "" не соответствует формату "%Y-% m-% d% H:% M:% S '", когда код ответа равен 200, поэтому исключение не возникает.

0 голосов
/ 21 сентября 2019

Ваша функция записывает исключение, поэтому строка после вызова функции не будет выполнена.Вы можете поместить последнее утверждение вне предложения pytest.raises, например:

from scrap import scrap

def test_scrap():
    with pytest.raises(Exception) as e:
        assert scrap(date='test', x=0, y=0)
    assert str(e.value) == 'Invalid input'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...