如何mock.patch一个生成器/有产量的类方法

How to mock.patch a class method which is a generator/has yield

提问人:Kabira K 提问时间:11/5/2023 更新时间:11/5/2023 访问量:20

问:

如何修补生成器类方法。例如,在下面的课堂上,我们将如何修补get_changed_diff_patch方法?

class PassiveJsonMixin(JsonMixin):
    """
    passive items that do not have id/key
    """

    def __init__(self, *args, **kwargs):
        JsonMixin.__init__(self, *args, **kwargs)
        # self.build_json()
        pass
    def get_changed_diff_patch(self, parent_hidden=False):
        print ("From PassiveJsonMixin: get_changed_diff_patch")
        return
        yield

通常的方法

patch.object(mymod.PassiveJsonMixin, 'get_changed_diff_patch',wrapper(mymod.PassiveJsonMixin.get_changed_diff_patch) )
                                                                                                                                                                    

                                                                                                                                                                                                                                                                                                                                          

似乎不起作用。

生成器 补丁 产量 python-unittest.mock

评论

1赞 Сергей Кох 11/5/2023
stackoverflow.com/questions/36165929/......
0赞 Kabira K 11/5/2023
谢谢。在提供的答案中也详细说明了更多内容。

答:

0赞 Kabira K 11/5/2023 #1

通过使用 with 上下文来扩展一下答案:

from unittest import mock

class MyClass:
    def some_generator(self):
        for i in range(5):
            yield i

    def method_using_generator(self):
        values = []
        for value in self.some_generator():
            values.append(value)
        return values


with mock.patch.object(MyClass, 'some_generator', return_value=[10, 20, 30, 40, 50]):
    my_instance = MyClass()
    result = my_instance.method_using_generator()
    print (result)