Python 为列表迭代器编写单元测试?
嗨,我是Python新手,我刚刚开始学习如何在Python中实现基于数组的列表。我用迭代器使我的列表可编辑。我提出了一个错误,当索引大于列表长度时停止迭代。然而,当我编写单元测试时,我遇到了这个错误,但我在列表迭代器中明确地提出了StopIterationPython 为列表迭代器编写单元测试?,python,unit-testing,Python,Unit Testing,嗨,我是Python新手,我刚刚开始学习如何在Python中实现基于数组的列表。我用迭代器使我的列表可编辑。我提出了一个错误,当索引大于列表长度时停止迭代。然而,当我编写单元测试时,我遇到了这个错误,但我在列表迭代器中明确地提出了StopIteration Traceback (most recent call last): File "C:\Users\User\Desktop\task1unitTest.py", line 110, in testIter self.assert
Traceback (most recent call last):
File "C:\Users\User\Desktop\task1unitTest.py", line 110, in testIter
self.assertRaises(StopIteration, next(it1))
File "C:\Users\User\Desktop\ListIterator.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上。这不是的正确用法 试试这个:
with self.assertRaises(StopIteration):
next(it1)
或者这个:
self.assertRaises(StopIteration, next, it1)
如果您的列表中包含
None
,那么初步的一瞥就表明您停止了迭代,这在我的心目中是不理想的。你能告诉我们你是如何测试它的吗?也就是说,你最初输入的列表是什么,你的期望是什么?他的意思是他正在用类似于self.array=[None]*50
的东西初始化数组,并且只存储非None
值。好的,谢谢你的帮助。当系统允许我时,我会接受你的答案。它失败的原因是下一步(it1)
在调用assertRaises
之前得到评估
self.assertRaises(StopIteration, next, it1)