2014-11-19 5 views
0

Я сделал простой генератор в 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 

, но я вижу, что это разбивает после первой итерации, что я делаю неправильно?

любая помощь? Thanks

+0

Довольно уверен, что все, что вы пытаетесь выполнить, идет не так. Что именно вы хотите сделать? – user2097159

+0

Взгляните на это: http://pythontesting.net/framework/nose/nose-introduction/. Вам нужно запустить его * с помощью команды, которую я подозреваю, что вы этого не сделали. – HarryCBurn

+0

@ user2097159 Он пытается получить выход с использованием носа, который является модулем тестирования. – HarryCBurn

ответ

0

Вы неправильно подходите к тесту.

Ваш итератор в основном эквивалентен xrange с твердым кодированием, начиная с 2 и доходит до бесконечности.

Причина, по которой она начинается с 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)) 

Также отметим, что утверждает не предикаты, так что они не дают вам обратно логическое значение для использования в условных операторах.

Смежные вопросы