如何模拟类实例属性?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何模拟类实例属性?相关的知识,希望对你有一定的参考价值。

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

答案

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'中的大写字母。

以上是关于如何模拟类实例属性?的主要内容,如果未能解决你的问题,请参考以下文章

如何模拟类实例属性?

如何在 Vs Code 中更改默认自动选择的用户片段行为

创建片段而不从 java 代码实例化它

如何用模拟模拟只读属性?

如何在所有活动和片段中使用 MediaPlayer 的单个实例?

如何使用 phpunit 模拟 Yii@1.1 的 CActiveRecord(避免空属性)?