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

时间:2018-05-03 20:44:41

标签: python unit-testing

您好我是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

1 个答案:

答案 0 :(得分:1)

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

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    function()
}

试试这个:

self.assertRaises(StopIteration, next(it1))

或者这个:

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