如何给模拟对象命名?

时间:2019-07-06 13:46:27

标签: python

如何在unittest.mock中设置模拟功能的__name__属性?

我做了以下事情:

func = Mock(name="foo")
print(func.__name__)

发出AttributeError: __name__

我还尝试创建一个具有__name__属性的自定义对象,并将其传递给spec为:

class f_mock:
    def __init__(self,name):
        self.__name__ = str(name)

fobj = f_mock("foo")
func = Mock(spec=fobj)
print(func.__name__)

会发出TypeError: __name__ must be set to a string object

2 个答案:

答案 0 :(得分:2)

尝试一下:

mock = MagicMock()
mock.configure_mock(name='my_name')
print(mock.name)
'my_name'

答案 1 :(得分:0)

为什么不直接在模拟游戏中设置__name__

func = Mock()
func.__name__ = 'foo'
print(func.__name__)

正如Ghassen在回答中提到的那样,您也可以使用configure_mock,它在所有意图和目的上都可以实现相同的目的,但是如果您要批量配置模拟的多个属性和/或属性,则可能更可取实例,因为您可以将所有内容放入字典中,并将其解压缩为函数参数。例如,

my_config = {'__name__': 'foo', 'other_property': 'bar'}
mock.configure_mock(**my_config)

再次,根据您的双重考试目的是什么,我建议您使用最简单的解决方案即可达到目标。