【问题标题】:self.assertRaise not catching TypeError even though it is being raised [duplicate]self.assertRaise 没有捕获 TypeError,即使它正在被引发 [重复]
【发布时间】:2017-02-01 21:28:44
【问题描述】:

我有以下功能:

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

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

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 出现了,为什么我的单元测试失败了?

【问题讨论】:

    标签: python unit-testing


    【解决方案1】:

    您将调用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)
    

    【讨论】:

      猜你喜欢
      • 2019-02-01
      • 1970-01-01
      • 2014-10-23
      • 1970-01-01
      • 2022-06-14
      • 1970-01-01
      • 1970-01-01
      • 2014-11-09
      • 1970-01-01
      相关资源
      最近更新 更多