簡體   English   中英

重置python模擬生成器返回值

[英]Reset a python mock generator return value

如何“重置”返回生成器的方法。 如果我模擬此方法,但在測試的方法中兩次使用父類,則第一個調用將消耗生成器,而第二個調用將沒有數據。 下面的示例代碼。 兩次調用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的返回值是調用的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM