2015-05-02 54 views
0

我试图测试组织一个这样的脚本:发电机返回嘲笑失败assert_called_with

class Processor(object): 
    def __init__(self, *args): 
     pass 

def my_iterator(elements): 
    for element in elements: 
     yield Processor(element) 

我只是想测试处理器对象的创建使用传递在迭代的每个元素到my_iterator()

我分别测试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在所有NotCalled 。当my_iterator()产生一个元素时不应该调用它吗?

回答

2

当迭代器产生一个项目时,ProcessorMock被调用来产生项目,但项目本身从不被调用。你不应该断言item被调用,你应该做出那些关于ProcessorMock的断言:

ProcessorMock.assert_called_with(vals[idx])