如何“重置”返回生成器的方法。如果我模拟此方法但在被测方法中两次使用父类,则第一次调用消耗生成器,第二次调用没有数据。下面的示例代码。对 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')]
[]
最佳答案
这个怎么样?
mock_class.side_effect = lambda x: {'a': '10', 'b': '20'}.iteritems()
每次调用都会产生副作用,因此每次都会重新创建。
你甚至可以像这样设置字典
my_dict = {'a': '10', 'b': '20'}
mock_class.side_effect = lambda x: my_dict.iteritems()
side_effect的返回值就是调用的结果。
关于python - 重置 python 模拟生成器返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39574537/