如何模拟类实例属性?

时间:2018-01-31 22:25:09

标签: python mocking

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有什么误解?

1 个答案:

答案 0 :(得分:6)

return_value适用于callables,只需写:

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

# test1 test2

你必须在{ - 1}}语句中注明班级,注意patch中班级的大写字母。