AssertionError: ValueError не повышен - PullRequest
0 голосов
/ 08 октября 2019

init исключение класса не вызывает исключение, которое будет идентифицировано assetRaises ()

Когда я создаю экземпляр отдельно для класса, определенное исключение печатается правильно

import unittest

class Circle:
    def __init__(self, radius):
        # Define the initialization method below
        self.radius = radius
        try :
          if  radius < 0 or radius > 1000 : raise ValueError
        except ValueError :
          print("radius must be between 0 and 1000 inclusive")

class TestCircleCreation(unittest.TestCase):
    def test_creating_circle_with_negative_radius(self):
        # Try Defining a circle 'c' with radius -2.5 and see 
        # if it raises a ValueError with the message
        # "radius must be between 0 and 1000 inclusive"
        with self.assertRaises(ValueError) as e:
            c = Circle(-2.5)
        self.assertEqual(str(e.exception),"radius must be between 0 and 1000 inclusive")

выдает ошибку:

AssertionError: ValueError not raised

Ответы [ 2 ]

1 голос
/ 08 октября 2019

assertRaises только проверяет, если исключение выдается внутри диспетчера контекста. Вы перехватываете исключение и не переоцениваете его, поэтому юниттест никогда не увидит его.

Возбуждение исключения и его немедленная отловка также не имеет смысла. Вместо этого сделайте:

class Circle:

    def __init__(self, radius):
        # Define the initialization method below
        self.radius = radius
        if radius < 0 or radius > 1000:
            raise ValueError("radius must be between 0 and 1000 inclusive")
0 голосов
/ 08 октября 2019

Вы ловите исключение внутри __init__. Ваш тест утверждает, что исключение выбрасывается из из __init__, а не в него. Как это:

def __init__(self, radius):
    if radius < 0 or radius > 1000:
        raise ValueError("radius must be between 0 and 1000 inclusive")
    self.radius = radius
...