Припустимо, ми маємо щось таке:
import py, pytest
ERROR1 = ' --- Error : value < 5! ---'
ERROR2 = ' --- Error : value > 10! ---'
class MyError(Exception):
def __init__(self, m):
self.m = m
def __str__(self):
return self.m
def foo(i):
if i < 5:
raise MyError(ERROR1)
elif i > 10:
raise MyError(ERROR2)
return i
# ---------------------- TESTS -------------------------
def test_foo1():
with pytest.raises(MyError) as e:
foo(3)
assert ERROR1 in str(e)
def test_foo2():
with pytest.raises(MyError) as e:
foo(11)
assert ERROR2 in str(e)
def test_foo3():
....
foo(7)
....
З: Як я можу зробити test_foo3 () для тестування, щоб не виникало помилок MyError? Очевидно, що я міг просто перевірити:
def test_foo3():
assert foo(7) == 7
але я хочу перевірити це за допомогою pytest.raises (). Чи можливо це якось? Наприклад: у випадку, якщо функція "foo" взагалі не має поверненого значення,
def foo(i):
if i < 5:
raise MyError(ERROR1)
elif i > 10:
raise MyError(ERROR2)
може мати сенс перевірити цей шлях, імхо.
foo(7)
добре. Ви отримаєте правильне повідомлення, і його буде простіше налагодити з усіма результатами pytest. Пропозиція, яку ви змусили @Faruk ('Unexpected error...'
), нічого не говорить про помилку, і ви затримаєтесь . Єдине, що ти можеш зробити, щоб покращити це, висловивши свій намір, якtest_foo3_works_on_integers_within_range()
.