Что за ошибка 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
  1. В вашем сеттере нужно переставить обработку ошибки, иначе 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}")
    
  1. В тестах сеттер надо исполнять внутри контекс менеджера и не надо его вызывать как метод.
def test_p_area(self):
    with pytest.raises(ValueError):
        my_tri = Triangle(name="Треугольник", area=5, angles=3, perimeter=9)
        my_tri.p_area = '1'
→ Ссылка