所以我有班级狗:
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的格式正确。
感谢任何帮助,谢谢。
答案 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()