Как использовать self.assertRaises unittest с исключениями в объекте генератора? - PullRequest
10 голосов
/ 07 марта 2012

У меня есть объект генератора, который я хочу протестировать.Он проходит через цикл, и, когда в конце цикла определенная переменная все еще равна 0, я выдаю исключение.Я хочу протестировать это, но я не знаю как.Возьмите этот пример генератора:

class Example():
    def generatorExample(self):
        count = 0
        for int in range(1,100):
            count += 1
            yield count   
        if count > 0:
             raise RuntimeError, 'an example error that will always happen'

Я хотел бы сделать следующее:

class testExample(unittest.TestCase):
    def test_generatorExample(self):
        self.assertRaises(RuntimeError, Example.generatorExample)

Однако объект генератора не может быть отобран, и это дает

TypeError: 'generator' object is not callable

Как вы можете проверить, возникает ли исключение в функции генератора?

1 Ответ

25 голосов
/ 07 марта 2012

assertRaises является менеджером контекста начиная с Python 2.7, поэтому вы можете сделать это следующим образом:

class testExample(unittest.TestCase):

    def test_generatorExample(self):
        with self.assertRaises(RuntimeError):
            list(Example().generatorExample())

Если у вас Python <2.7, вы можете использовать <code>lambda исчерпать генератор:

self.assertRaises(RuntimeError, lambda: list(Example().generatorExample()))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...