我正在尝试测试这样组织的脚本:
class Processor(object):
def __init__(self, *args):
pass
def my_iterator(elements):
for element in elements:
yield Processor(element)
我只想测试一个Processor对象是使用传递给my_iterator()
的iterable中的每个元素创建的。
我分别测试了Processor
,所以我写了my_iterator()
的测试,看起来像这样:
import mock
from mymodule import my_iterator
class TestMyIterator(object):
@mock.patch('mymodule.Processor')
def test_my_iterator(self, ProcessorMock):
vals = range(3)
g = my_iterator(vals)
for idx, item in enumerate(g):
item.assert_called_with(vals[idx])
但是当我运行测试(使用nosetests)时,它告诉我item
完全没有被调用。当my_iterator()
产生一个元素时,是否应该调用它?
答案 0 :(得分:2)
当迭代器产生一个项目时,会调用item
来生成项目,但从不调用项目本身。你应该做出关于ProcessorMock
的断言,而不是断言ProcessorMock.assert_called_with(vals[idx])
被调用:
on.("click", handler)