我怎样才能重置"返回生成器的方法。如果我模拟此方法但在测试方法中使用父类两次,则第一次调用使用生成器,第二次调用没有数据。示例代码如下。对get_values的两次调用应该返回相同的(模拟的)列表。
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')]
[]
答案 0 :(得分:2)
这是怎么回事?
mock_class.side_effect = lambda x: {'a': '10', 'b': '20'}.iteritems()
每次调用都会产生副作用,因此每次都会重新创建。
你甚至可以像之前那样设置dict
my_dict = {'a': '10', 'b': '20'}
mock_class.side_effect = lambda x: my_dict.iteritems()
side_effect的返回值是调用的结果。