关于python:self.assertRaise没有捕获TypeError,即使它被引发

self.assertRaise not catching TypeError even though it is being raised

本问题已经有最佳答案,请猛点这里访问。

有以下功能:

1
2
3
4
def is_complete(grph):
    if not isinstance(grph,graph):
        raise TypeError
            ...

和下面的测试用例的信息:

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

把下面的错误: 误差 (最新呼叫追踪货物的):

1
2
3
4
5
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婊子为什么我育我的单元测试失败?


您将调用的返回值传递给is_complete,作为self.assertRaises的第二个参数。相反,您需要将函数is_complete本身作为第二个参数传递,is_complete的参数作为assertRaises的附加参数。(换言之,把碎片传给assertRaises,让它实际调用。)

1
self.assertRaises(TypeError, is_complete, g1)

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

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