如何在生成器对象中使用unittest的self.assertRais和异常?



我得到了一个要进行单元测试的生成器对象。它经过一个循环,当循环结束时某个变量仍然为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

那么,如何测试生成器函数中是否引发异常呢?

assertRaises是Python 2.7之后的上下文管理器,因此您可以这样做:

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

如果您有Python<2.7然后可以使用lambda对发电机进行排气:

self.assertRaises(RuntimeError, lambda: list(Example().generatorExample()))

最新更新