python - 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:
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')
异常的类型本身携带与任意错误消息相同的信息。
推荐阅读
- jasmine - 为什么在运行业力时出现“[web-server]: 404: /absoluteC”
- typescript - TypeScript 条件排除类型从接口中排除
- javascript - 成功条带付款收费后Nodemailer不发送电子邮件
- sql - 如何修复此查询以返回来自原始连接的所有行以及使用另一个属性中的 id 的所有行
- scala - 在 Scala 中使用 K-means 对 Spark 进行图像分割
- automated-tests - Hoverfly:自定义 JSON 请求正文匹配器匹配特定部分
- python - numpy.core._exceptions.UFuncTypeError: ufunc 'add' 不包含带有签名匹配的循环
- tensorflow - 为什么 ```on_epoch_end()``` 从 google cloud ml 引擎上的几个工作人员调用?
- java - 使用数组变量的 Nullpointerexception
- python - 可以从shogun的python界面控制随机种子吗?