AssertionError:未引发ValueError

时间:2019-10-08 08:51:32

标签: python python-3.x python-unittest

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 个答案:

答案 0 :(得分:1)

<init-param> <param-name>mappedfile</param-name> <param-value>false</param-value> </init-param> 仅测试上下文管理器内是否抛出异常。您捕获了异常并且不提出它,因此它不会被unittest看到。

引发异常然后立即捕获它也没有任何意义。 而是:

assertRaises

答案 1 :(得分:0)

您正在__init__中捕获异常。您的测试断言该异常是从__init__抛出 out ,而不是捕获在其中。像这样:

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