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