首页 > 解决方案 > AssertionError:未引发 ValueError

问题描述

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

标签: pythonpython-3.xpython-unittest

解决方案


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")

推荐阅读