2015-05-02 50 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])