1
如何「重置」返回生成器的方法。如果我嘲笑這種方法,但在被測方法中使用父類兩次,第一次調用消耗生成器,第二次調用沒有數據。下面的示例代碼。對get_values的兩次調用應返回相同(模擬)列表。重置python模擬生成器返回值
import mock
class MyTestClass(object):
def __init__(self, param):
self.param = param
def get_values(self):
return self.param
class MyTestRunner(object):
def __init__(self):
pass
def run(self):
cls = MyTestClass(2)
print list(cls.get_values())
cls = MyTestClass(3)
print list(cls.get_values())
with mock.patch.object(MyTestClass, 'get_values') as mock_class:
mock_class.return_value = ({'a': '10', 'b': '20'}).iteritems()
m = MyTestRunner()
m.run()
預計:
[('a', '10'), ('b', '20')]
[('a', '10'), ('b', '20')]
實際:
[('a', '10'), ('b', '20')]
[]
非常感謝! – jqwha
只是想指出,爲了使這個Python 3友好,人們將不得不使用'items'而不是'iteritems'。另外,'items'也可以在Python 2中工作。所以它在兩個版本中都很友好。 – idjaw