python unittest class 中的 assertRaises

assertRaises in python unittest class

我有一个 class 我写的,我正在尝试弄清楚单元测试。

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

单元测试

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 检查 class.

中的加注

如果我们去 the documentation for assertRaises 旅行,我们就能看到问题。

它的签名是:

assertRaises(exception, callable, *args, **kwds)

这意味着您必须为其提供一些可调用的东西——一个函数。相反,您传递的是一个列表——可调用函数 self.chk.vlist.

output

试试这个,传入那个函数本身。测试会失败,这就是你想要的。

def test_vlist(self):
    self.assertEqual(self.chk.vlist(), [1, 2, 3])
    self.assertRaises(TypeError, self.chk.vlist)

P.S。在我写这篇文章之前,我必须修复你代码中的缩进和拼写错误。请确保您在此处粘贴的代码完全您在本地运行的代码,否则我们将难以为您提供帮助。

这是检查 self.assertRaises 的方法。

 with self.assertRaises(TypeError):
      self.chk.vlist()

它会调用该函数,只有在 with 块中的代码执行中没有引发 TypeError 时才会失败。