Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为列表迭代器编写单元测试?_Python_Unit Testing - Fatal编程技术网

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

Python 为列表迭代器编写单元测试?,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

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

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)