self.assertRaise没有捕获TypeError,即使它被引发

时间:2016-09-23 22:48:56

标签: python unit-testing

我有以下功能:

def is_complete(grph):
    if not isinstance(grph,graph):
        raise TypeError 
            ...

以及以下测试用例:

def test_is_complete_q4(self):
        g1 = [1]
        self.assertRaises(TypeError, is_complete(g1))

我收到以下错误: 错误 回溯(最近一次调用最后一次):

File "/Users/.../test_graph_functions.py", line 34, in test_is_complete_q4
    self.assertRaises(TypeError, is_complete(g1))
  File "/Users/.../graph_functions.py", line 6, in is_complete
    raise TypeError
TypeError

我可以清楚地看到引发TypeError,为什么我的unittest会失败?

1 个答案:

答案 0 :(得分:0)

您将调用is_complete的返回值作为self.assertRaises的第二个参数传递。相反,您需要将函数is_complete本身作为第二个参数传递,并将is_complete的参数作为assertRaises的附加参数。 (换句话说,将片段传递给assertRaises,让进行实际通话。)

self.assertRaises(TypeError, is_complete, g1)

或者,您可以使用assertRaises作为上下文管理器,并在with语句的正文中调用您的函数。

with self.assertRaises(TypeError):
    is_complete(g1)