assertrai在python unittest类中出现



我写了一个类,我想弄清楚单元测试。

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

它将调用该函数,并且只有当TypeErrorwith块内的代码执行中没有引发时才会失败。

相关内容

  • 没有找到相关文章