目前我正在为我的班级功能编写单元测试。
def test_getitem(self):
test1 = List(3)
for i in range(3):
test1.append(i)
self.assertEqual(test1[2], 2)
test1 = List(3)
for i in range(3):
test1.append(i)
self.assertRaises(IndexError, test1[4])
我现在遇到的问题是我代码的self.assertRaises
部分。我不确定它是如何完成的,但是当我运行unittest
时,它会产生错误Index out of range
。对,它应该是"好的"。
List
是我的班级,List(3)
创建了一个基于数组的列表。所以当我test1.append(i)
时,它现在是[0,1,2]
。
test1[2]
是一种在类中调用getitem
函数的方法,类似于self[index]
。
我想知道我是否断言正确抚养? self.assertEqual
没问题。
答案 0 :(得分:5)
在调用函数之前计算参数,因此当您使用test1[4]
时,它会在self.assertRaises
被调用之前执行。所以它无法捕获异常。
这也是2参数形式具有签名assertRaises(exception, msg=None)
的原因,这里的第二个参数是" msg"匹配,而不是要调用的函数。所以在任何情况下它都不会做正确的事情。
您可以使用上下文管理器:
with self.assertRaises(IndexError):
test1[4]
或使用多参数形式:
self.assertRaises(IndexError, test1.__getitem__, 4)
答案 1 :(得分:4)
当你因为抛出异常而声明时,你应该使用with
语句
def test_getitem(self):
test1 = List(3)
for i in range(3):
test1.append(i)
self.assertEqual(test1[2], 2)
test1 = List(3)
for i in range(3):
test1.append(i)
with self.assertRaises(IndexError):
test1[4]