我用 Python 3.4 编写了一个非常简单的生成器:
class Gen:
def __init__(self, xml_lines, attribs):
#...
def _get_values(self, xml_line):
# get only specific "attribs" from a line in a "xml"
def values(self):
for line in self.xml_lines:
yield self._get_values(line)
当我使用 for 循环使用生成的值时,代码有效:
reader = Gen(...):
for v in reader.values():
print(v)
但是我现在正在尝试创建一个单元测试,为此,我需要一次获取每个值(在循环之外)。我正在尝试这样的事情:
import unittest
#...
reader = Gen(...):
v = reader.values()
self.assertIsNone(v)
当我尝试这样做时,我总是得到一个
AssertionError: <generator object next_values at 0x7fe2a5f9e3f0> is not None
所以,当我自己调用这些 值 时,它会返回一些东西(它是一个指针吗?)而不是生成的值。
当我考虑使用基本生成器模式时,我的问题比我自己的代码更广泛:测试 Python 生成器的正确方法是什么?
原文由 Nigini 发布,翻译遵循 CC BY-SA 4.0 许可协议
生成器是用来迭代的。您可以使用 next() 函数获取生成器的下一个值。请注意,如果您的生成器耗尽了它的值,它将引发
StopIteration
异常。