捕获错误失败的Python unittest测试用例

时间:2016-11-15 08:08:11

标签: python unit-testing python-3.x

所以我有班级狗:

class Dog:

def __init__(self, res):
    self._res = res


def error(self):
    raise IndexError

和单元测试:

class TestDog(unittest.TestCase):

def setUp(self):
    self.dog = Dog([1,2])

def testError(self):
    self.assertRaises(IndexError, self.dog.error())

为什么测试用例testError失败? self.dog.error()应该导致IndexError被rasied,我相信assertRaises的格式正确。

感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:2)

当Python运行第self.assertRaises(IndexError, self.dog.error())行时,它必须在将方法传递给它之前计算方法self.assertRaises的参数,因此它调用self.dog.error()会引发错误。这就是所有功能的工作方式。 self.assertRaises的存在无助于阻止引发错误。你打算调用self.assertRaises(IndexError, self.dog.error),其中第二个参数现在是实际的函数/方法对象self.dog.error而没有调用它。 self.assertRaises会在try / except中为您调用它,以便它可以正确地进行测试。

可替换地:

with self.assertRaises(IndexError):
    self.dog.error()