生成器返回失败assert_called_with的Mocks

时间:2015-05-02 08:05:00

标签: python unit-testing testing mocking

我正在尝试测试这样组织的脚本:

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()产生一个元素时,是否应该调用它?

1 个答案:

答案 0 :(得分:2)

当迭代器产生一个项目时,会调用item来生成项目,但从不调用项目本身。你应该做出关于ProcessorMock的断言,而不是断言ProcessorMock.assert_called_with(vals[idx]) 被调用:

on.("click", handler)