Каждый раз, когда я заканчиваю, чтобы проверить, что ожидаемое исключение брошено с Питиш Я в конечном ищете глядя на синтаксис, поэтому вот оно:
import pytest def test_my_exception_is_raised(): with pytest.raises(MyException): my_function()
Этот тест потерпит неудачу, если звонить my_function ()
не Поднять исключение типа MyException
Отказ
Но что, если я хочу проверить исключение, имеет ожидаемое сообщение?
def test_my_exception_is_raised_with_message(): with pytest.raises(MyException) as e: my_function() assert "my message" in str(e.value)
В этом случае е
имеет тип ExceptionInfo.
, а не на самом деле Исключение
Так что вам нужно использовать E.Value
получить в сообщении. Вы также можете утверждать вещи о трассировке исключения через e.traaceback
Но у меня недавно у меня не было упрецеляции.
Пока я снова смотрел на эти вещи, я обнаружил, что вы действительно можете чистить это немного в некоторых ситуациях, делая матч регулярного выражения на строке, представляющему брошению исключения, как это:
def test_my_exception_is_raised(): with pytest.raises(MyException, match=r"^My message.*"): my_function()
Это использует Re.Search
сделать сопоставление и увидеть Python Docs для быстрого регенератора.
Я думаю, что я бы использовал этот метод Regex, если бы я хотел утвердить что-то вроде наличия определенного кода ошибки где-то в моем сообщении об ошибке, но чем более подробно-версию, когда я утверждаю что-то об сообщении, который зависит от контекста моего Тест, такой как идентификатор того, что я просто пытался ввести в мою базу данных в сообщение об ошибке.
def test_this_raises_error_code_1234(): with pytest.raises(MyException, match=r"1234"): myfunction() def test_this_raises_error_including_item_id_and_data(): my_test_id, my_test_data = "XXXX", {"some": "data"} my_test_object = MyThing(id=my_test_id, data=my_test_data) with pytest.raises(MyException) as e: my_function(my_test_object) assert f"Couldn't process MyThing {my_test_id} with data {my_test_data}!" in str(e.value)
Оригинал: “https://dev.to/caro401/testing-exceptions-with-pytest-7ch”