gpt4 book ai didi

Python单元测试: Unit test the message passed in raised exception

转载 作者:行者123 更新时间:2023-12-03 08:46:59 27 4
gpt4 key购买 nike

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

文件: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的unittest中测试和检查异常中传递的消息?

最佳答案

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

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

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

关于Python单元测试: Unit test the message passed in raised exception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61061723/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com