繁体   English   中英

Python 单元测试:单元测试在引发异常中传递的消息

[英]Python Unittest: Unit test the message passed in raised exception

我正在使用 Python 中的 unittest 框架对圆的半径进行单元测试。 如果半径不是数值,那么我会使用自定义消息引发异常。

文件:circle.py

class Circle():

    def __init__(self, radius):
        if not isinstance (radius, (int,float)):
            raise TypeError('radius must be a number')
        else:
            self.radius = radius

文件:test_circle.py

import unittest
from circle import Circle

class CircleTest(unittest.TestCase):

    def test_radius(self):
        c1 = Circle(2.5)
        self.assertEqual(c1.radius, 2.5)

    def test_radius_type(self):
        self.assertRaises(TypeError, Circle, 'hello')

if __name__ == "__main__":
    unittest.main()

现在,我可以检查引发的异常。 但是,我也想知道异常中传递的消息是否是确切的消息。 谁能指导我如何测试和检查 Python 中单元测试异常中传递的消息?

如果要查看异常中的错误信息,则需要捕获异常。

def test_radius_type(self):
    with self.assertRaises(TypeError) as exc:
        c = Circle('hello')
    self.assertEquals(str(exc.exception), "radius must be a number")

也就是说,自定义异常会更干净。

class NotANumberError(TypeError):
    pass


class Circle:
    def __init__(self, radius):
        try:
            self.radius = float(radius)
        except ValueError:
            raise NotANumberError


...

def test_radius_type(self):
    self.assertRaises(NotANumber, Circle, 'hello')

异常的类型本身携带与任意错误消息相同的信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM