[英]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.