Nie*_*ein 10 python unit-testing generator
我有一个我想要进行单元测试的发电机对象.它经历一个循环,当在循环结束时,某个变量仍为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'
Run Code Online (Sandbox Code Playgroud)
我想做的是
class testExample(unittest.TestCase):
def test_generatorExample(self):
self.assertRaises(RuntimeError, Example.generatorExample)
Run Code Online (Sandbox Code Playgroud)
但是,生成器对象不是可密封的,这给出了
TypeError: 'generator' object is not callable
Run Code Online (Sandbox Code Playgroud)
那么如何测试生成器函数中是否引发异常?
Jak*_*cil 25
assertRaises 是自Python 2.7以来的上下文管理器,所以你可以这样做:
class testExample(unittest.TestCase):
def test_generatorExample(self):
with self.assertRaises(RuntimeError):
list(Example().generatorExample())
Run Code Online (Sandbox Code Playgroud)
如果你有Python <2.7那么你可以使用a lambda来耗尽生成器:
self.assertRaises(RuntimeError, lambda: list(Example().generatorExample()))
Run Code Online (Sandbox Code Playgroud)