我写了一个类,我想弄清楚单元测试。
listtest.py
class mylist:
def __init__(self,lst):
self.lst=lst
def vlist(self):
if not isinstance(self.lst,list):
raise TypeError('Not a list')
return self.lst
unittest
import unittest
import listtest
class testvlist(unittest.TestCase):
def setUp(self):
self.chk=mylist([1,2,3])
def test_vlist(self):
self.assertEqual(self.chk.vlist(),[1,2,3])
self.assertRaises(TypeError,self.chk.vlist(),self.chk.lst)
if __name__ == '__main__':
uunittest.main()
assertRaises
不正常工作。它应该失败,因为self.l
是一个列表,但测试显示运行正常。如果我添加5
,应该显示运行正常,但我认为加薪是不正确的,因为列表运行正常,它不应该。如何使用self.assertRaises
来检查类内部的异常
如果我们查看assertRaises
的文档,就可以看到这个问题。
其签名是:
assertRaises(exception, callable, *args, **kwds)
这意味着你必须提供一些可以调用的的东西——一个函数。相反,您传递的是一个列表——可调用函数self.chk.vlist
的输出。试试这个,传入那个函数本身。测试将失败,这是你想要的。
def test_vlist(self):
self.assertEqual(self.chk.vlist(), [1, 2, 3])
self.assertRaises(TypeError, self.chk.vlist)
注:在我写这篇文章之前,我必须修复你代码中的缩进和拼写错误。请确保您粘贴在这里的代码与您在本地运行的完全相同,否则我们很难帮助您。
这是检查self.assertRaises
的方法。
with self.assertRaises(TypeError):
self.chk.vlist()
它将调用该函数,并且只有当TypeError
在with
块内的代码执行中没有引发时才会失败。