为列表迭代器编写单元测试?



嗨,我是Python的新手,我刚刚开始学习如何在Python中实现基于数组的列表。我用迭代器使我的列表可迭代。我提出了一个错误,当索引大于列表长度时停止迭代。但是,当我编写单元测试时,我遇到了此错误,但我在我的列表迭代器中清楚地提出了 StopIteration?

Traceback (most recent call last):
File "C:UsersUserDesktoptask1unitTest.py", line 110, in testIter
self.assertRaises(StopIteration, next(it1))
File "C:UsersUserDesktopListIterator.py", line 10, in __next__
raise StopIteration
StopIteration

这是我的列表迭代器:

class ListIterator:
def __init__(self,array):
self.current=array
self.index=0
def __iter__(self):
return self
def __next__(self):
if self.current[self.index]==None:
raise StopIteration
else:
item_required=self.current[self.index]
self.index+=1
return item_required

任何帮助将不胜感激!

编辑: 好的,这就是我测试它的方式:

def testIter(self):
a_list=List()
a_list.append(1)
a_list.append(2)
a_list.append(3)
it1=iter(a_list)
self.assertEqual(next(it1),1)
self.assertEqual(next(it1),2)
self.assertEqual(next(it1),3)
#self.assertRaises(StopIteration, next(it1))

错误发生在self.assertRaises

这不是unittest.assertRaises的正确用法。

self.assertRaises(StopIteration, next(it1))

试试这个:

with self.assertRaises(StopIteration):
next(it1)

或者这个:

self.assertRaises(StopIteration, next, it1)

最新更新