簡體   English   中英

通過迭代器進行測試,該怎么做?

[英]testing over an iterator, how to do it?

我在Python中制作了一個簡單的生成器,它位於名為program.py的文件下

class Loop():
    def __init__(self):
        self.i=1

    def __iter__(self):
        return self

    def next(self):
        if self.i>10:
            raise StopIteration
        self.i=self.i+1
        return self.i

我制作了一個unittest模塊,以便它測試迭代器,並且當列表中有數字5時,它會打印出該部分測試失敗。 我做了這樣的事情:

class TestA(unittest.TestCase):
def test(self):
    for x in Loop():
        if not self.assertRaises(AssertionError,self.assertEqual(x,5)):
            print x

但是我看到這在第一次迭代后就破裂了,我在做什么錯呢?

有什么幫助嗎? 謝謝

您的測試方法有誤。

您的迭代器基本上相當於從2開始硬編碼到無窮大的xrange

從開始的原因2是因為你初始化i 1和遞增i返回的第一個值先下一內。

我將測試編寫如下

class TestA(unittest.TestCase):
    def test_loop_is_sliceable(self):
        slc = itertools.islice(Loop(), 5)
        self.assertEqual(range(2, 7), list(slc))

還要注意,斷言不是謂詞,因此它們不會給您帶來條件語句中的麻煩。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM