Подтвердить что ты не робот

Использование pytest.raises для отслеживания ожидаемой пользовательской ошибки

Я новичок в pytest и пытаюсь преобразовать некоторые функциональные тестовые скрипты в те, которые хорошо играют с pytest. Мой модуль имеет собственные типы ошибок, и я пытаюсь использовать метод "pytest.raises() как excinfo". Это научный/числовой пакет, и мне нужно проверить, что определенные методы являются последовательными при вызове, поэтому я не могу просто перейти к материалам более низкого уровня. Благодаря

4b9b3361

Ответ 1

Что мешает вам импортировать конкретное исключение и использовать его в своем заявлении with pytest.raises? Почему это не работает? Было бы более полезно, если бы вы могли более подробно рассказать о какой проблеме вы столкнулись.

# your code

class CustomError(Exception):
    pass


def foo():
    raise ValueError('everything is broken')

def bar():
    raise CustomError('still broken')    

#############    
# your test

import pytest
# import your module, or functions from it, incl. exception class    

def test_fooErrorHandling():
    with pytest.raises(ValueError) as excinfo:
        foo()
    assert excinfo.value.message == 'everything is broken'

def test_barSimpleErrorHandling():
    # don't care about the specific message
    with pytest.raises(CustomError):
        bar()

def test_barSpecificErrorHandling():
    # check the specific error message
    with pytest.raises(MyErr) as excinfo:
        bar()
    assert excinfo.value.message == 'oh no!'

def test_barWithoutImportingExceptionClass():
    # if for some reason you can't import the specific exception class,
    # catch it as generic and verify it in the str(excinfo)
    with pytest.raises(Exception) as excinfo:
        bar()
    assert 'MyErr:' in str(excinfo)