在Python中嘲笑对象的成员变量

2024-09-30 12:12:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下python代码要测试

class Foo(object):
    def __init__(self):
        self.__fb_access_tokens = PropertiesReader('path/to/authentication_details/file')
        self.__fb_post_write_path = PropertiesReader('path/to/write_properties/file')

    def write_information(self):
        contents = compute_file_contents()
        write_contents_to_file(self.__fb_post_write_path, contents)

在我的测试用例中,我想模拟self.__fb_post_write_path。我不能嘲笑PropertiesReader(),因为它也会影响self.__fb_access_tokens。在

在python中可以模拟对象的成员变量吗?在

如有任何建议,我们将不胜感激。在

谢谢!在


Tags: topath代码selffbaccessfoodef
1条回答
网友
1楼 · 发布于 2024-09-30 12:12:05

一旦创建了类的实例,只需为属性设置一个新值。如果选择使用双下划线名称,则必须手动“损坏”属性名称:

instance = Foo()
instance._Foo__fb_post_write_path = 'mocked value

考虑改用下划线。除非您正在编写框架类(其中各种各样的开发人员都会将您的代码子类化),否则您希望避免名称混乱特性。在

如果必须拦截对PropertiesReader的调用,那么无论如何都要模拟PropertiesReader,但要传递对某些属性的原始未匹配对象的调用。将Mock.side_effect设置为函数,并根据参数改变行为:

^{pr2}$

返回mock.DEFAULT告诉模拟返回到默认行为(例如,生成另一个Mock实例或生成您设置的return_value)。在

相关问题 更多 >

    热门问题