Я новичок в тестировании и задаюсь вопросом, возможно ли параметризовать значения, которые должны возвращать значение, и другие, которые должны возвращать ошибку в одном тесте.
Допустим, у меня есть простая функция divide_hundred_by(x)
, определенная следующим образом:
def divide_hundred_by(x):
if x == 0:
raise ZeroDivisionError('You cannot divide by zero')
return 100/x
Теперь я хотел бы протестировать эту функцию на пару значений для x и параметризовать этот тест.Я обнаружил, что могу использовать:
import pytest
@pytest.mark.parametrize('value, expected',
[
(10, 10),
(-2, -50),
(0.5, 200)
]
)
def test_divide_hundred_by(value, expected):
with pytest.raises(ZeroDivisionError):
divide_hundred_by(0)
assert divide_hundred_by(value) == expected
Но это гарантирует, что в случае сбоя в части предупреждения весь тест завершится неудачно для всех значений, а это не то, что я хотел бы.
Мне интересно, можно ли написать что-то в форме:
@pytest.mark.parametrize('value, expected',
[
(10, 10),
(-2, -50),
(0.5, 200),
(0, "ZeroDivisionError")
]
)
def test_divide_hundred_by(value, expected):
assert divide_hundred_by(value) == expected
, чтобы проверка прошла для других параметров.Я не могу найти что-либо в Интернете по этому вопросу.