python - 如何在生成器对象中使用 unittest 的 self.assertRaises 异常?

标签 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'

我想做的是

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()))

关于python - 如何在生成器对象中使用 unittest 的 self.assertRaises 异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9599610/

相关文章:

python - 将 fsolve 与 scipy 函数一起使用

python - 如何修改与 Python 中特定正则表达式匹配的文本?

ruby-on-rails - 与factory_girl一起使用固定装置

unit-testing - 模拟 DBSet,EF 模型优先

javascript - redux-saga:函数被调用两次

python - 是否可以在单个进程中运行 flask ? (解决 ipdb 和 Docker ttys 的明显问题)

python - 回复 : Getting the Adafruit_I2C Import Changed Into Another GPIO Layout

java - 使用 JMockit 模拟被测类的私有(private)方法

python - 如何 len(generator())

flutter - Hive Generator 在 Flutter 中导致 pubspec.yaml pub get 出错