如何模拟类实例属性?

问题描述 投票:4回答:1
class MyClass:
    def __init__ (a,b):
           self.a = a
           self.b = b

def myFunc():
    myClass = MyClass(1,2)
    print myClass.a, myClass.b

在我的测试中,我想运行myFunc但是在myFunc中我想让myClass返回'test1'和'test2'作为它的a和b属性。

所以我这样做了:

with patch('__main__.Myclass') as MockClass:
   instance = MockClass.return_value
   instance.a.return_value = 'test1'
   instance.b.return_value = 'test2'
   myFunc()

但是,结果是<MagicMock name=MyClass().a' id='2938383'> .....而不是简单的test1和test2。

我究竟做错了什么?我对如何使用mock有什么误解?

python mocking
1个回答
6
投票

return_value用于callables,只需写:

with patch('__main__.MyClass') as MockClass:
   instance = MockClass.return_value
   instance.a = 'test1'
   instance.b = 'test2'
   myFunc()

# test1 test2

你必须在with语句中使用patch这个类,注意'__main__.MyClass'中的大写字母。

© www.soinside.com 2019 - 2024. All rights reserved.