Python Unittest:单元测试传入的消息引发异常
我正在使用Python中的unittest框架对圆的半径进行单元测试。如果半径不是一个数字值,那么我会用一条自定义消息引发异常 文件:circle.pyPython Unittest:单元测试传入的消息引发异常,python,unit-testing,python-unittest,Python,Unit Testing,Python Unittest,我正在使用Python中的unittest框架对圆的半径进行单元测试。如果半径不是一个数字值,那么我会用一条自定义消息引发异常 文件:circle.py class Circle(): def __init__(self, radius): if not isinstance (radius, (int,float)): raise TypeError('radius must be a number') else:
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
class Circle():
def __init__(self, radius):
if not isinstance (radius, (int,float)):
raise TypeError('radius must be a number')
else:
self.radius = radius
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的unittest中测试和检查异常中传递的消息?如果要检查异常中的错误消息,需要捕获异常
def test_radius_type(self):
with self.assertRaises(TypeError) as exc:
c = Circle('hello')
self.assertEquals(str(exc), "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')
异常类型本身包含与任意错误消息相同的信息。您阅读了吗?还请注意,您的逻辑似乎可疑-所有内容都将被视为非数字。不要使用
类型
;如果isinstance(半径,(int,float))使用。
。我已经检查了官方文档。根据VSCode的建议,我试图匹配assertRaises中的字符串(TypeError,圆圈,'hello','radius必须是一个数字)。我还尝试将self.assertEquals()放入self.assertRaises()中,但现在理解了缩进的问题。谢谢