Что за ошибка Failed: DID NOT RAISE
Есть вот такая функция:
@property
def p_area(self):
return self.area
@p_area.setter
def p_area(self, value):
print(f"Площадь фигуры '{self.name}' = {self.area + value}")
if not isinstance(value, (int, float)):
raise ValueError('Значение не является числом')
Мне нужно проверить, self.area увеличивается на заданное в value значение и если это значение- не число, выдавать ошибку. Написал следующий тест в pytest:
def test_p_area(self):
with pytest.raises(ValueError):
my_tri = Triangle(name="Треугольник", area=5, angles=3, perimeter=9)
my_tri.p_area()
По выполнению возникает вот такая ошибка Failed: DID NOT RAISE <class 'ValueError'>
Ответы (1 шт):
Автор решения: asanisimov
→ Ссылка
- В вашем сеттере нужно переставить обработку ошибки, иначе
self.area + valueупадет раньше, и ошибка будет совсем другаяTypeError: unsupported operand type(s) for +: 'int' and 'str'
@p_area.setter
def p_area(self, value):
if not isinstance(value, (int, float)):
raise ValueError('Значение не является числом')
print(f"Площадь фигуры '{self.name}' = {self.area + value}")
- В тестах сеттер надо исполнять внутри контекс менеджера и не надо его вызывать как метод.
def test_p_area(self):
with pytest.raises(ValueError):
my_tri = Triangle(name="Треугольник", area=5, angles=3, perimeter=9)
my_tri.p_area = '1'